【问题标题】:How to store language specific text in C#/WPF application [duplicate]如何在 C#/WPF 应用程序中存储特定于语言的文本 [重复]
【发布时间】:2014-04-29 00:36:24
【问题描述】:

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

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

【问题讨论】:

  • 为什么不创建一个辅助方法(或扩展方法),它传入语言并返回适当的“文本”?设置应用程序启动时或基于用户配置在某个全局变量中使用的语言,并使用该语言传递到此帮助方法(或扩展方法)。或者也许使用字典并将语言存储为键,后跟一些标识符(即 English_ErrorMsg),值是从应用程序属性中读取的适当文本?

标签: c# wpf properties.settings


【解决方案1】:

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

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

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

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

【讨论】:

  • 这看起来很有希望——我使用的是设置文件而不是资源文件。一个想法,如果我可以在应用程序运行时更改它,需要在用户在应用程序中选择一种语言时完成。
  • @DuncanGroenewald 要切换到其他语言,只需更改 Thread.CurrentThreat.CurrentUICulture。您还可以将本地化嵌入到不同的程序集中,并独立于应用程序进行发布。
【解决方案2】:

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

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

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

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

编辑:
这个答案是我一直在寻找的答案:Fredrik Mörk on How to use localization in C#

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2016-10-14
    • 2017-01-11
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多