【问题标题】:Localization using resources file not working使用资源文件进行本地化不起作用
【发布时间】:2011-10-15 09:05:26
【问题描述】:

我添加了新的 Rosource 文件 UserNotification.resx。然后我添加了两个本地化文件,分别命名为 UserNotification.hr-HR.resx 和 UserNotification.sl-SI.resx。 (关注话题:How to use localization in C#

然后我将 Windows 语言更改为“si”。如果我使用System.Globalization.CultureInfo.CurrentCulture.ToString() 打印当前文化输出 si sl-SI

但是,我总是从 UserNotification.resx 中得到一个字符串。 Seams 无法识别本地化资源文件。

【问题讨论】:

  • 尝试更改代码中的 CurrentUICulture 看看会发生什么?
  • 如果我将它添加到我的 App.xaml.cs 构造函数中,它会起作用: Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(System.Globalization.CultureInfo.CurrentCulture.ToString());但这是正确的方法吗?如果我使用多线程呢?

标签: c# localization resource-files


【解决方案1】:

如果您使用多线程,.NET 本地化的问题是您需要为您生成的每个线程手动设置文化(以防它与 Windows 文化不同,以防用户可以选择所需的语言)。它不是从主线程继承的。

在创建新线程之后,在启动它之前,您应该将其文化设置为主线程的文化(通常使用窗口的默认文化)。

因此,系统显示出良好的 CurrentCulture。但是当前线程说什么?也许应用程序出于某种原因以不同的文化启动,这就是它加载默认资源文件的原因?无论如何,您没有理由不手动设置当前文化。大多数情况下,当您想为用户提供更改应用程序语言的选项时,您需要这样做。

【讨论】:

  • System.Globalization.CultureInfo.CurrentUICulture.ToString() 和 Thread.CurrentThread.CurrentUICulture.ToString() 返回相同的输出:en-US,但 System.Globalization.CultureInfo.CurrentCulture.ToString() 返回hr-HR(== Windows -> 控制面板 -> 区域和语言格式属性)。所以我必须设置CurrentThread.CurrentUICulture,因为没有System.Globalization.CultureInfo.CurrentUICulture的setter?
  • 是的,您必须将 CurrentThread.CurrentUICulture 和 CurrentThread.CurrentCulture 设置为您想要的。您弄错了 System.Globalization.CultureInfo,英文版本,这就是您的应用使用默认资源文件的原因。就像 MSDN 对 Thread.CurrentUICulture 所说的那样——“获取或设置资源管理器使用的当前文化,以在运行时查找特定于文化的资源。”。
猜你喜欢
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
相关资源
最近更新 更多