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# 创建多语言设置的主要内容,如果未能解决你的问题,请参考以下文章

为程序设置多语言界面——C#

C# winForm程序项目如何设置多语言?

iOS多语言设置

C# 多语言切换

ios最简单的多语言设置

iOS- 国际化(多语言设置)