0

当用户使用应用程序时,我需要能够显示特定于语言的 UI 文本。目前,我将文本存储在每种语言的 Properties.Settings 文件中。有没有办法创建一个指向设置文件的变量,这样我只需将此变量设置为指向所选语言设置文件,然后应用程序使用此变量来检索所需的文本字符串。

使用 Properties.Settings.Default.textString 意味着我必须执行以下操作:

if (language == "English") {
   String text = Properties.SettingsEnglish.Default.textString;
} else 
if (language == "SomethingElse") {
   String text = Properties.SettingsSomethingElse.Default.textString;
}

我更喜欢做这样的事情,因为它只需要执行一次检查:

Properties varSettings;

if (language == "English") {
   var = Properties.SettingsEnglish;
} else 
if (language == "SomethingElse") {
   var = Properties.SettingsSomethingElse;
}


...
String text = varSettings.Default.textString;

有关执行此操作的最佳方法的任何建议 - 请记住,这必须是用户可选择的应用程序选项,而不是操作系统级别语言特定的安装选项。

4

2 回答 2

1

.Net 应用程序已经内置了强大的本地化机制,在如何使用 C# 中的本地化中进行了讨论。总结一下:

  1. 将资源文件添加到您的项目中,并给它们一个语言指示后缀适当的后缀,例如法语的“strings.fr.resx”或德语的“strings.de.resx”。
  2. 将字符串添加到具有适当名称的 resx 文件中,例如“header”、“label1”、“label2”。
  3. 保存资源文件。
  4. 设置Thread.CurrentThread.CurrentUICulture为所需的文化。
  5. 使用自动创建的类,例如“strings.header”,从文件中加载字符串。

不要忘记时间和日期格式等非字符串本地化方面。

有关概述,请参阅http://msdn.microsoft.com/en-us/library/h6270d0z(v=vs.110).aspx

于 2014-04-29T00:58:34.790 回答
0

基本上,我确定这已经得到了回答(例如:here),但要点通常是相同的。

您将需要一个包含字符串值的资源字典(例如:error_message_1、error_message_2、greeting、favorite_peekachu),然后您可以为每种语言创建一个文件,并在设置中设置该文件,或者使用一个大的“如果-else-otherwise" 代码中的循环(这让我一想到就发抖)。

我记得实际上在android上读过一些关于这个的好文章,我想这个想法是一样的:)

这是CodeProject上一篇文章的链接。

编辑:
这个答案是我一直在寻找的答案:Fredrik Mörk关于如何在 C# 中使用本地化

于 2014-04-29T00:51:15.817 回答