在Winforms应用程序中支持多种语言

5
我快要完成我的C#应用程序了,唯一剩下的就是实现多语言支持。
我已经创建了资源文件,其中包含几种语言的字符串,用于显示在屏幕上的所有文本。
以下是我的英文资源文件示例:
Name                    |  Value                       | Comment
------------------------------------------------------------------------------
lblName                 |   Name:                      |  Name EN

我的荷兰资源文件示例:

Name                    |  Value                       | Comment
------------------------------------------------------------------------------
lblName                 |  Naam:                       | Name NL

我该如何将字段Value绑定到我的Label (lblName)的Text属性上?
我正在使用.NET Framework 3.5。

1
这完全取决于GUI框架,而您没有指定。 - H H
2
请查看这篇文章使用.NET中的资源文件进行本地化过程 - Preet Sangha
这是一篇针对本地化WinForms应用程序的MSDN步骤指南:http://msdn.microsoft.com/zh-cn/library/y99d1cd3%28v=vs.100%29.aspx - Jakub Konecki
我猜你现在已经注意到,多语言支持不是在快完成时才考虑的事情... :) - Emond
这不是一个很大的应用程序,我在谷歌上搜索了一些解释,但没有找到好的教程,我只看到几乎每个人都使用了一个新的资源文件,所以我也这样做了 :) - Max
3个回答

1
我知道这个问题很久以前就被问过了,但是因为没有答案,所以我建议如下:
要在C#中访问资源文件,可以使用ResourceManager。首先根据当前语言创建您的资源管理器。对此,您有两个选择。您可以使用switch或if语句(如果语言由菜单确定),或者使用本地化来使用计算机的当前区域设置。最后,在这两种方式中,您都可以调用GetString()方法并提供键,我认为在您的情况下是lblName。
注:在下面的示例中,我使用的是从菜单检索语言的第一种方法。
string selectedLanguage = comboBoxLang.Text; // Comes from a menu option
string resourceFile = string.Empty;

/***/
Logic to retrieve the proper resourceFile depending on the selectedLanguage.
/***/

ResourceManager rm = new ResourceManager(resourceFile, Assembly.GetExecutingAssembly());

// Set your label text.
lblName.Text = rm.GetString("lblName");

-2

试试这个:

<asp:Label runat="server" Text="<%$ Resources:DutchLanguage, Value %>"></asp:Label>

我正在使用Windows Forms,这是一个桌面C#应用程序,而不是网页(ASP)。 - Max
您提到了 C# 应用程序,但却没有从一开始就明确说明。 - Eugene Pavlov
1
那么我应该使用:Web应用程序并使用ASP标记,还有一个标记:WinForms。 - Max

-3
将不同语言的值放入一个数据库表中。
让用户选择语言。
根据语言选择从数据库中获取特定语言的数据。
然后将其绑定到标签文本上。

3
我认为那不是正确的做法,资源文件不是白创建的。 - Max
这实际上是一个不错的解决方案,但对于从数据库中获取的数据进行翻译,例如查找表中的文本单元格,则无用。为你的努力点赞。 :) - Elvedin Hamzagic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接