我正在开发一个WPF / C#应用程序,需要在全球化方面具有文化意识。我已经有了资源文件和一个可绑定的翻译管理器,它们都按预期工作。
目前我正在这样做:
Thread.CurrentThread.CurrentUICulture = _currentlyConfiguredUiCulture;
Thread.CurrentThread.CurrentCulture = _currentlyConfiguredUiCulture;
这一切都在用户界面中连线如下:
TranslationManager.Instance.LanguageChanged += TranslationManager_LanguageChanged;
private void TranslationManager_LanguageChanged(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentUICulture = TranslationManager.Instance.CurrentLanguage;
Thread.CurrentThread.CurrentCulture = TranslationManager.Instance.CurrentLanguage;
}
这一切都很好用!
问题是当应用程序启动时,我的机器语言环境是“en-GB”,并且使用上面显示的代码正确设置了它。但是,当我点击一些处理日期的IValueConverter类中的代码时:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
return DateTime.Parse(value.ToString(), culture);
}
return null;
}
这里的文化财产总是“en-US”......这究竟是怎么发生的?如何解决这个问题,以便应用程序实际使用正确的系统文化?
答案 0 :(得分:2)
此link表示您可能需要添加以下内容:
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag)));
答案 1 :(得分:1)
如果您创建了一个线程,那么文化信息将重置为默认值(对于该线程)。我想在.net 4.5中可能有一种设置默认线程cultureinfo的方法。 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture.aspx