C# 创建多语言设置
Posted
技术标签:
【中文标题】C# 创建多语言设置【英文标题】:C# Creating a setup for multi-language 【发布时间】:2010-10-22 09:12:06 【问题描述】:我使用下面的简短文章添加了多语言。
当您添加例如德语时,您将拥有以下文件: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs
在第一个文件中,您将拥有中性语言的资源,例如字符串、图像、..
所以现在您还需要为代码中使用的字符串添加资源。添加一个新的资源文件并将其命名为 formMain.Strings.resx 然后我将为每个应该翻译的字符串输入名称、值对。当您添加资源文件时,它会自动输入,因为在每次关闭 resx 设计器时都会自动重新生成另一个名为 formMain.Strings.Designer.cs 的文件。
添加另一个名为 formMain.Strings.de-DE.resx 的资源。从以前的资源中添加相同的名称键,然后用对应的德语单词更改值。现在从源访问创建的资源将是这样的。
MessageBox.Show(formMain_Strings.SameStringName);
但是,我已将我的语言更改为泰语。当我在 VS 中运行我的应用程序时,一切正常。
但是,一旦我添加了一个安装项目并安装在客户端计算机上,它就不会将语言更改为泰语,而是保持默认语言。
所以我已将资源文件和 th-TH dll 添加到项目设置中。我仍然遇到同样的问题。
Packaging file 'Lang.Strings.resx'...
Packaging file 'MultiLanguage.resources.dll'...
Packaging file 'MultiLanguage.exe'...
Packaging file 'Lang.Strings.th-TH.resx'...
因为在 Visual Studio 中运行时一切正常。安装后我需要做些什么才能让它运行。我拥有的每个文件的所有属性都保持默认。
非常感谢,
=========
static void Main()
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("th-TH");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
【问题讨论】:
【参考方案1】:我找到了答案
单击解决方案资源管理器中的设置项目,然后单击添加\项目输出\。从对话框中选择要包含本地化(卫星)程序集的项目,然后选择本地化资源。
在我安装到的文件夹中安装后,我有 th-TH 文件夹,其中包含卫星程序集。
谢谢,
【讨论】:
如果可以的话,您最好尽快放弃安装项目并切换到 Windows Installer XML (WiX)。我曾经使用设置项目发布了产品。再也不。永远,永远。 我刚刚快速浏览了一下 WiX,它也未能在安装包中包含本地化资源 dll。似乎任何类型的设置项目中的本地化资源都无法正常工作(我正在处理 VC++ 项目)。【参考方案2】:尝试在应用启动时添加(如果不存在):
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture;
这里有一个short article 讨论如何使这项工作的一些选项,以及在运行时选择语言环境的选项。
在 cmets 之后编辑:
确保您的附属组件位于适当的位置并正确构建。从我引用的那篇文章中:
“当 .NET 运行时启动应用程序时,它会查找可能的附属程序集文件。附属程序集文件是仅具有 .resources.dll 扩展名而不是 .exe ir .dll 的资源程序集文件(如果主程序集是一个库)。附属程序集文件始终位于应用程序主目录的特定语言子目录中。如果应用程序文件是 Converter.exe,那么日语附属程序集文件是 ja\Converter.resources.dll。"
您应该在此处检查一些事项。检查程序集的名称。另外,请确保它位于正确的位置。在您的情况下,它应该位于可执行文件下具有适当名称的 th-TH 子目录中。如果它在那里,它应该被找到并正确使用。
这里是关于这个话题的another good source of information。
【讨论】:
你好。我已经将它添加到我的表单加载事件中。在视觉工作室一切正常。只有当我安装在客户端的计算机上时。 public Form1() System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("th-TH");初始化组件(); 在加载表单之前尝试将其移至 Main() 例程。我认为在 form_load 中使用它为时已晚......此时,程序集已经被加载并选择了。 你好。我已将其从 form_load 中删除并将其放入我的 main.xml 文件中。但是,它适用于视觉工作室。但是,一旦我在客户端计算机上安装它,它只会显示默认语言而不是泰语。在我的第一篇文章中,我添加了我的资源文件和 resource.dll。我应该这样做吗? 你说它可以在 VS 中工作 - 如果在 VS 之外运行,它是否可以在你的系统上工作,在发布模式下? 是的,我已经在我的机器和客户端上安装了。我已经在调试和发布模式下进行了编译。我还在我和客户的计算机上都安装了。但是,它始终以默认语言显示。以上是关于C# 创建多语言设置的主要内容,如果未能解决你的问题,请参考以下文章