.NET库本地化工具是一个云API,用于处理编译后的.NET库,这些库可以是用C#或VB.NET编写的。它支持从框架版本4.0到4.6的.NET程序集(DLL)的翻译。本文旨在为使用Visual Studio和已安装NuGet的.NET软件开发者提供指导。要使用API,需要有互联网连接,并且最低框架版本要求为4.0。
打开Visual Studio并创建一个新的类库项目,如果使用VB.NET,项目命名为TestLibrary.VB;如果使用C#,则命名为TestLibrary.CSharp。删除Class1.vb或Class1.cs文件,并创建一个新的类,命名为Test.vb或Test.cs。
打开项目属性,然后打开程序集信息编辑器;指定中立语言(对于本教程)为英语(美国)。接下来,通过NuGet安装Newtonsoft.Json包:
PM> Install-Package Newtonsoft.Json
添加辅助类到项目中:
如果使用VB.NET,下载这个文件(Helper.vb.zip);如果使用C#,下载这个文件(Helper.cs.zip)。打开Test.vb或Test.cs,并添加一个返回字符串的函数。
Function GetString() As String
Return "Hello World!"
End Function
public string GetString() {
return "Hello World!";
}
到目前为止的结果...
TestLibrary.VB - Start.zip(无依赖项)
TestLibrary.CSharp - Start.zip(无依赖项)
首先,需要编译DLL项目,然后将TestLibrary.VB.dll或TestLibrary.CSharp.dll复制到一个新文件夹中,同时复制Newtonsoft.Json.dll。
打开Visual Studio并创建一个新的控制台应用程序项目,如果使用VB.NET,项目命名为NLL.Com.VB;如果使用C#,则命名为NLL.Com.CSharp。现在,需要在连接到API之前添加3个引用:
首先,下载NLL.zip并添加对NLL.dll文件的引用。
PM> Install-Package Newtonsoft.Json
PM> Install-Package DotNetZip
打开Module1.vb或Program.cs并编辑Sub Main()或static void Main(string[] args);这里是要插入的代码...
Dim NLLClient As New NLL.Client
NLLClient.Load("", "TestLibrary.VB", "en-US")
File.WriteAllBytes("TestLibrary.VB.dll", NLLClient.DLLFile)
File.WriteAllBytes(NLLClient.LanguageFileName, NLLClient.LanguageFile)
Console.WriteLine(String.Format("OK! (Elapsed: {0}...", NLLClient.Elapsed.ToString))
Console.ReadLine()
NLL.Client NLLClient = new NLL.Client();
NLLClient.Load("", string.Empty, "en-US");
File.WriteAllBytes("TestLibrary.CSharp.dll", NLLClient.DLLFile);
File.WriteAllBytes(NLLClient.LanguageFileName, NLLClient.LanguageFile);
Console.WriteLine(string.Format("OK! (Elapsed: {0}...", NLLClient.Elapsed.ToString()));
Console.ReadLine();
运行应用程序并等待结果。结果将是两个文件保存在应用程序文件夹中,修改后的库"TestLibrary.VB.dll"或"TestLibrary.CSharp.dll",以及另一个名为"TestLibrary.VB en-US"或"TestLibrary.CSharp en-US"的文件。第二个文件简单地包含输入DLL中字符串的JSON数据。
现在使用任何文本编辑器(如记事本)打开创建的两个文件。在名为"TestLibrary.VB fr-FR"或"TestLibrary.CSharp fr-FR"的文件中查找"Hello World!"并将其更改为"Bonjour le monde!",在"TestLibrary.VB es-ES"或"TestLibrary.CSharp es-ES"中更改为"Hola Mundo!"。
就是这样!现在有一个完全可本地化的DLL,带有翻译。但这还没有结束,让进行测试!
下载GUI工具。确保为每个项目语言正确输入所有值。
VB.NET项目示例(如果VB项目中未留空,则需要根命名空间,否则服务器会返回错误)。
CSharp项目选项(默认命名空间与Visual Basic中的根命名空间不同,留空)。
现在有了API的结果DLL,应该测试它。将TestLibrary.VB.dll或TestLibrary.CSharp.dll的引用从服务器添加回一个新的控制台应用程序项目,项目名为ConsoleDemo.VB或ConsoleDemo.CSharp。
打开Module1.vb或Program.cs,并更新Sub Main()或static void Main(string[] args),使用以下代码:
Dim Test As New TestLibrary.VB.Test
Dim CultureName As String = "en-US"
Console.WriteLine(CultureName)
TestLibrary.VB.HandCode.Helper.ChangeLanguage(CultureName)
Console.WriteLine(Test.GetString)
Console.WriteLine()
CultureName = "fr-FR"
Console.WriteLine(CultureName)
TestLibrary.VB.HandCode.Helper.ChangeLanguage(CultureName)
Console.WriteLine(Test.GetString)
Console.WriteLine()
CultureName = "es-ES"
Console.WriteLine(CultureName)
TestLibrary.VB.HandCode.Helper.ChangeLanguage(CultureName)
Console.WriteLine(Test.GetString)
Console.ReadLine()
TestLibrary.CSharp.Test Test = new TestLibrary.CSharp.Test();
string CultureName = "en-US";
Console.WriteLine(CultureName);
HandCode.Helper.ChangeLanguage(CultureName);
Console.WriteLine(Test.GetString());
Console.WriteLine();
CultureName = "fr-FR";
Console.WriteLine(CultureName);
HandCode.Helper.ChangeLanguage(CultureName);
Console.WriteLine(Test.GetString());
Console.WriteLine();
CultureName = "es-ES";
Console.WriteLine(CultureName);
HandCode.Helper.ChangeLanguage(CultureName);
Console.WriteLine(Test.GetString());
Console.ReadLine();
在项目中,将三个翻译文件("TestLibrary.VB en-US"、"TestLibrary.VB fr-FR"和"TestLibrary.VB es-ES"或"TestLibrary.CSharp en-US"、"TestLibrary.CSharp fr-FR"和"TestLibrary.CSharp es-ES")添加到项目的根目录,选择全部三个,然后切换到文件属性,选择"始终复制"到输出目录。
4. 运行项目并看到它在行动...
下载VB.NET演示ConsoleDemo.VB
下载C#演示ConsoleDemo.CSharp
(由"asimonassi"建议)
并没有打算创建一个将取代Visual Studio中资源文件的东西,仍然使用它们来处理图像和文件,但这种技术可能是在某些情况下的有用补充或替代;例如:
如果想允许其他开发者在没有源代码的情况下翻译库中的字符串。
另一个优点是,每次对任何翻译文件进行更改时,都不必重新构建项目。
即使在混淆之后,库仍然可以工作;可以在混淆之后对翻译文件进行额外的更改,它仍然会工作。