【发布时间】: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