具有不同 CurrentCulture 和 CurrentUICulture 的 WPF 应用程序

Posted

技术标签:

【中文标题】具有不同 CurrentCulture 和 CurrentUICulture 的 WPF 应用程序【英文标题】:WPF application with different CurrentCulture and CurrentUICulture 【发布时间】: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”也是由于未知原因是德国的。 【参考方案1】:

你可以use WPF Converter to change culture setting by default。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 @LukasKabrt:“使用 WPF 转换器更改文化设置”,虽然非常简洁,答案。

以上是关于具有不同 CurrentCulture 和 CurrentUICulture 的 WPF 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

WPF XAML 绑定和 CurrentCulture 显示

.NET 中 CultureInfo 的 CurrentCulture 和 CurrentUICulture 属性有啥区别?

C#:区分 CurrentCulture 和 InvariantCulture 的单元测试

在R中将具有不同长度和两个条件的不同数据帧的列相乘

显示不同时区的时间

用于设置 CurrentCulture 的线程创建事件