【问题标题】:WPF application with different CurrentCulture and CurrentUICulture具有不同 CurrentCulture 和 CurrentUICulture 的 WPF 应用程序
【发布时间】:2015-06-11 15:43:33
【问题描述】:

我们的目标是为用户提供设置不同的应用程序语言和格式(例如,英文文本但德文日期/数字格式)。到目前为止,我尝试了不同的方法,最有希望的是这个(当然是简化的硬编码版本):

var german = new CultureInfo("de-DE");
var english = new CultureInfo("en-US");

Thread.CurrentThread.CurrentCulture = german;
CultureInfo.DefaultThreadCurrentCulture = german;

Thread.CurrentThread.CurrentUICulture = english;
CultureInfo.DefaultThreadCurrentUICulture = english;
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(english.IetfLanguageTag)));

不幸的是,最后一行还强制执行日期和数字的英文格式(不仅仅是文本)。并且 FrameworkElement 中没有“CultureProperty”可以覆盖。那么有没有办法在不到处使用 StringFormat 的情况下实现所需的行为?

当我尝试在最后一行使用德国文化而不是英文时,一些文本是德文而不是英文(这又是不正确的)。

【问题讨论】:

  • 如果不覆盖 LanguageProperty 元数据会怎样?如果不设置语言,大多数转换器和东西都会默认为英语
  • 那么语言有时会被破坏。例如,我在用户关闭应用程序时显示消息框(因此它是对 OnClosing 事件的反应),但其中的文本是德语,尽管上面代码中的两个 CurrentUICulture 属性都设置为英语。即使当我调试显示自身的消息时,“Thread.CurrentThread.CurrentUICulture”也是由于未知原因是德国的。

标签: c# wpf culture lang uiculture


【解决方案1】:

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • @LukasKabrt:“使用 WPF 转换器更改文化设置”,虽然非常简洁,答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多