【发布时间】:2010-12-16 20:02:03
【问题描述】:
我需要制作一个必须支持两种语言的表单(目前)。 这两种语言的外观不一样,也有一半的形式不是相似的,但它们之间仍然有一些相似之处。 在两种不同语言及以上的情况下处理这个问题的最佳方法是什么? 顺便说一句,我使用的程序语言是 C#。
10 倍
【问题讨论】:
标签: c# .net winforms localization
我需要制作一个必须支持两种语言的表单(目前)。 这两种语言的外观不一样,也有一半的形式不是相似的,但它们之间仍然有一些相似之处。 在两种不同语言及以上的情况下处理这个问题的最佳方法是什么? 顺便说一句,我使用的程序语言是 C#。
10 倍
【问题讨论】:
标签: c# .net winforms localization
我认为每种语言的单个全局资源文件比每种语言的每种形式的资源文件更好。
我最近在以下链接"Globalization of Windows Applications in 20 Minutes" 的帮助下对一个winforms 应用程序进行了全球化。以下是简单的步骤:
在解决方案 (
你好=你好
欢迎=欢迎
此文件“data.en-US.txt”是英文资源文本文件。 用你想要的语言创建一个类似的文件,比如德语,所以它的文件名是 data.de-DE.txt
你好=光环
欢迎=Willikomen
第一列是标签,将用作引用文本的键。
使用命令“resgen.exe data.en-US.txt”从文本文件中创建一个“data-en-US.resource”文件,
对所有语言文件执行此操作。现在在您的解决方案中,您有 2 个(或更多,具体取决于您要支持的语言)
data.
string label = "Hello";
string cultureString = "de-DE" // [or "en-US"]
string strResourcesPath = Application.StartupPath;
CultureInfo ci = new CultureInfo(cultureString); ['cultureString' represents your desired language]
ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("data", strResourcesPath , null); ["data" is the first part of the filename]
var answer = rm.GetString(label, ci); // here ans="Halo" as we selected de-DE
【讨论】:
首先,配置您的项目默认语言,您可以在项目属性中执行此操作,在程序集信息对话框中,底部有一个“中性语言”设置。
将此设置为您的“默认”语言,如果您愿意,可以设置为“主要”语言。
然后,确保现在的表单使用该语言。
要开始翻译和更改表单以适应不同的语言,首先将表单的“Localizable”属性设置为 true,然后将 Language 属性更改为您的第二(或第三、第四等)语言。
更改后,您就可以开始进行更改了。确保您没有删除 表单上的项目,而只是将它们设置为不可见。对所有语言都进行了删除,但因此只会为当前语言设置不可见。
不断在语言之间来回切换以进行调整。
要以特定语言测试您的程序,请在 Main 方法的开头执行此操作:
Thread.CurrentThread.CurrentCulture = new CultureInfo("code of that other language");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("code of that other language");
例如,要使用“挪威语,博克马尔语”语言(我的主要语言)对其进行测试,您将使用的代码将是“nb-NO”。要查找您需要使用的代码,一旦您将表单的语言更改为您想要本地化的语言并保存,就会在解决方案资源管理器中添加一个具有正确名称的新文件。
例如,对于 Form1,将存在以下文件:
Form1.cs
Form1.designer.cs
Form1.nb-NO.resx <-- here's the localized content
Form1.resx
现在,完成此操作后,您在制作本地化应用程序时还需要注意许多其他事项,我建议您阅读有关 SO 和网络的其他问题以及更多信息,例如:
【讨论】: