我正在开发一个需要对全球化具有文化意识的 WPF / C# 应用程序。我已经有资源文件和一个可以按预期工作的可绑定翻译管理器。
目前我正在这样做:
Thread.CurrentThread.CurrentUICulture = _currentlyConfiguredUiCulture;
Thread.CurrentThread.CurrentCulture = _currentlyConfiguredUiCulture;
这一切都在 UI 中连接起来,如下所示:
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”……这到底是怎么发生的?我该如何解决这个问题,以便应用程序实际上使用正确的系统文化?