2009-04-28 91 views
6

我使用下面的短文添加了多语言。C#创建多语言设置

当您添加例如德语,你将有以下文件: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

在第一个文件,你将有资源对于中性语言,如字符串,图像,...

所以,现在您需要为代码中使用的字符串添加资源。添加一个新的资源文件并将其命名为Main.Strings.resx 然后,我将为每个应该翻译的字符串输入名称,值对。当您添加资源文件时,它会自动键入,因为名称为formMain.Strings.Designer.cs的另一个文件会在每次关闭resx设计器时自动重新生成。

添加名为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()); 
    } 

回答

10

我找到了答案

点击Solution Explorer中的设置项目,然后单击添加\ Project Output \。从对话框中选择您想要包含本地化的项目(坐在精英)程序集,然后选择本地化资源。

在我安装到的文件夹中安装后,我有包含卫星组件的th-TH文件夹。

谢谢,

1

尝试在应用程序的启动将在此(如果它不存在):

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 

这里是一个short article讨论如何使这项工作的一些选项,以及在运行时选择区域设置的选项。评论后


编辑:

确保您的卫星组装是在适当的地方,并正确建造。从这篇文章我引用:

“当.NET运行时启动应用程序它寻找一个可能的卫星程序集文件。卫星程序集文件是一个资源只有程序集文件具有.resources.dll扩展而不是.exe ir。如果应用程序文件是Converter.exe,那么日文卫星程序集文件是ja \ Converter.resources.dll。如果应用程序文件是Converter.exe,那么日文卫星程序集文件是ja \ Converter.resources.dll。“

你应该在这里检查一些东西,检查程序集的名称,并确保它在正确的位置,在你的情况下,它应该位于具有合适名称的th-TH子目录中在你的可执行文件。如果它的存在,它应该被发现和正确使用。

这里是another good source of information这个话题。

+0

你好。我已经添加到我的表单加载事件。在Visual Studio中一切正常。只有当我安装在客户端的电脑上。 public Form1() System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(“th-TH”); InitializeComponent(); } – ant2009 2009-04-28 17:05:18

+0

尝试将它移动到Main()例程中,然后再加载表单。我相信在form_load中加载它已经太迟了...在这一点上,程序集已经被加载和选择。 – 2009-04-28 17:07:24