65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 库本地化器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (6投票s)

2015年11月18日

CPOL

5分钟阅读

viewsIcon

19589

downloadIcon

1320

在云中本地化 .NET 程序集并进行翻译

它是什么?

.NET 库本地化器是一个云 API,用于处理使用 C# 或 VB.NET 编译的 .NET 程序集。

它做什么?

它便于处理从 4.0 到 4.6 框架版本编译的 .NET 程序集(DLL)的翻译。

  1. 概述
  2. 设置项目
  3. 将您的 DLL 加载到云中
    1. 使用代码
    2. 使用 GUI 工具
    3. 测试结果

概述

本文档面向使用 Visual Studio 和已安装 nuget 的开发人员。

需要互联网连接才能连接到 API。
使用 API 的最低框架版本为 4.0。

设置项目

  1. 打开 Visual Studio 并创建一个新的类库项目,如果您使用 VB.NET,请将其命名为 TestLibrary.VB,如果您使用 C#,请命名为 TestLibrary.CSharp
  2. 删除 Class1.vbClass1.cs 并创建一个新类,将其命名为 Test.vbTest.cs
  3. 打开项目属性,然后打开程序集信息编辑器;(在此演练中)将中性语言指定为英语(美国)
  4. PM> Install-Package Newtonsoft.Json
  5. 将辅助类添加到您的项目中
    1. 如果您使用 VB.NET,请下载此文件(Helper.vb.zip)。
    2. 如果您使用 C#,请下载此文件(Helper.cs.zip)。
  6. 打开 Test.vbTest.cs 并添加一个返回 string 的函数。

VB.NET 示例

    Function GetString() As String
        Return "Hello World!"
    End Function

C# 示例

public string GetString() { return "Hello World!"; }

到目前为止的结果...

将您的 DLL 加载到云中

首先,您需要编译您的 DLL 项目,然后将 TestLibrary.VB.dllTestLibrary.CSharp.dll 复制到一个新文件夹中,同时还要复制 Newtonsoft.Json.dll

使用代码

  1. 打开 Visual Studio 并创建一个新的控制台应用程序项目,如果您使用 VB.NET,请将其命名为 NLL.Com.VB,如果您使用 C#,请命名为 NLL.Com.CSharp
  2. 现在,您需要添加 3 个引用才能连接到 API。
    1. 首先,下载 NLL.zip 并引用 NLL.dll 文件。
    2. PM> Install-Package Newtonsoft.Json
    3. PM> Install-Package DotNetZip
  3. 打开 Module1.vbProgram.cs 并编辑 Sub Main() static void Main(string[] args); ,以下是要插入的代码...

对于 VB.NET

(下载 项目)

Dim NLLClient As New NLL.Client
NLLClient.Load("<Path to TestLibrary.VB.dll>", "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()

对于 C#

(下载 项目)

NLL.Client NLLClient = new NLL.Client();
NLLClient.Load("<Path to TestLibrary.CSharp.dll>", 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" 的文件。

第二个文件仅包含 JSON 数据,代表输入 DLL 中的 string。在该文件中创建两个副本,第一个命名为 "TestLibrary.VB fr-FR""TestLibrary.CSharp fr-FR",第二个命名为 "TestLibrary.VB es-ES""TestLibrary.CSharp es-ES"

现在使用任何文本编辑器(如记事本)打开您迄今为止创建的两个文件。查找 "Hello World!" 并将其更改为 "TestLibrary.VB fr-FR""TestLibrary.CSharp fr-FR" 文件中的 "Bonjour le monde!",以及 "TestLibrary.VB es-ES""TestLibrary.CSharp es-ES" 文件中的 "Hola Mundo!"。

就是这样!您现在拥有一个完全可本地化的 DLL,其中包含翻译。

还没完,让我们进行测试吧!

使用 GUI 工具

下载 GUI 工具
请确保为每个项目语言正确输入所有值。

VB.NET 项目示例(如果 VB 项目中未留空,则需要根命名空间,否则服务器将返回错误)。

C# 项目选项(默认命名空间与 Visual Basic 中的根命名空间不同,请将其留空)。

测试结果

现在我们有了来自 API 的结果 DLL,我们将对其进行测试。

  1. 将服务器上的 TestLibrary.VB.dllTestLibrary.CSharp.dll 引用添加到名为 ConsoleDemo.VBConsoleDemo.CSharp 的新控制台应用程序项目中。
  2. 打开 Module1.vbProgram.cs,并将 Sub Main() static void Main(string[] args) 更新为以下代码。

    对于 VB.NET

            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()

    对于 C#

                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();
  3. 在项目内部,将三个翻译文件("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. 4. 运行项目并查看其运行效果...

关注点(如 "asimonassi" 所建议)

我无意创建替代 Visual Studio 中资源文件的东西,我仍然自己使用它们来处理图像和文件,但在某些情况下,这项技术可能是一个有用的补充或替代方案;例如:

  • 如果您想允许其他开发人员在不提供源代码的情况下翻译您的库中的字符串。
  • 另一个优点是,您不必每次更改任何翻译文件时都重新构建项目。
  • 即使在混淆后,库仍然可以工作;您可以在混淆后对翻译文件进行其他更改,它仍然会工作。

您是否有关于它如何有用的其他想法?请在下面的评论中告诉我。
谢谢。

 

© . All rights reserved.