在启动时加载所有本地化资源

时间:2012-01-09 06:30:37

标签: c# winforms resources localization internationalization

我发现了一些类似的主题,但我没有得到我正在寻找的答案。

在我开始“更严肃”(WinForms)项目之前,我只是在尝试国际化。因此,目前在我的小型测试应用程序中,我使用附属程序集(语言DLL文件)解决了本地化问题,并使用ResourceManager填充控件的文本字段,并通过Thread.CurrentThread.CurrentCulture& amp; Thread.CurrentThread.CurrentUICulture方法。

CultureInfo ci = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

this.button1.Text = Resources.LocTest.String1;

我想从程序初始启动时的资源中加载所有文本,不仅是主表单,还包括所有这些文本(也在那些尚未实例化的表单上)! 我怎么能实现这个?这个程序是否可行?

我得到了一些建议,我应该简化整个本地化过程,将“localizable”属性设置为true并完成翻译。 大多数教程都遵循这种方式。

有没有人知道,我应该使用哪种方法?

提前致谢!

我对本地化非常困惑......

1 个答案:

答案 0 :(得分:2)

请使用您提到的第二种方法。

  

我得到了一些建议,我应该简化整个本地化过程,将“localizable”属性设置为true并完成翻译。大多数教程都遵循这种方式。

因为这是微软认为应该如何在winforms应用程序中完成本地化的预期方式。 http://msdn.microsoft.com/en-us/library/y99d1cd3%28v=vs.90%29.aspx

您的第一个解决方案存在一个问题:如何保持其他语言的文字能够正确显示? 这是微软已经意识到的问题之一。使用SDK中的一个小工具:WINRES.exe,您可以看到设计的表单并为它们编写翻译。 http://msdn.microsoft.com/en-us/library/8bxdx003%28v=vs.90%29.aspx

如果您想在运行时更改语言并更新所有表单,本文可能会为您提示:http://msdn.microsoft.com/en-us/magazine/cc163609.aspx#S9
以下几行解释了如何更新UI:

Dim crm As ComponentResourceManager  
crm = New ComponentResourceManager(GetType(Main))   
crm.ApplyResources(cmdAddCustomer, cmdAddCustomer.Name)   
crm.ApplyResources(mnuFile, mnuFile.Name)   
crm.ApplyResources(mnuFileAddCustomer, mnuFileAddCustomer.Name)   

此代码的最后3行可以在设计器文件中的每种形式(localizable = true)中找到 因此,您可以为每个表单实现的更新方法指定一个接口,实现接口,并在语言更改后迭代所有表单并调用这些方法。

希望这可以帮助你...

相关问题