如何在C#/ WPF应用程序中存储特定于语言的文本

时间:2014-04-29 00:36:24

标签: c# wpf properties.settings

我需要能够在用户使用应用程序时显示特定于语言的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;

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

2 个答案:

答案 0 :(得分:1)

.Net应用程序已经内置了强大的本地化机制,在How to use localization in C#进行了讨论。总结一下:

  1. 将资源文件添加到您的项目中,并为它们提供一个语言指示后缀适当的后缀,例如" strings.fr.resx" for French或" strings.de.resx"德语。
  2. 使用适当的名称将字符串添加到resx文件,例如"标题","标签1","标签2"。
  3. 保存资源文件。
  4. Thread.CurrentThread.CurrentUICulture设置为所需的文化。
  5. 使用自动创建的类加载文件中的字符串,例如: " strings.header"
  6. 不要忘记非字符串本地化方面,如时间和日期格式。

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

答案 1 :(得分:0)

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

您需要一个包含字符串值的资源字典(例如:error_message_1,error_message_2,greeting,favorite_peekachu),然后您可以为每种语言提供一个文件,并在设置中设置该文件,或者拥有代码中的大“if-else-otherwise”循环(这让我感到不寒而栗)。

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

以下是CodeProject上文章的链接。

修改
这个答案是我正在寻找的答案:Fredrik Mörk How to use localization in C#