【问题标题】:Culture Not Being Set In App文化未在应用程序中设置
【发布时间】:2013-09-24 14:00:59
【问题描述】:

我正在开发一个 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”……这到底是怎么发生的?如何解决此问题,以便应用实际使用正确的系统文化?

【问题讨论】:

  • 只是一个猜测,但如果没有在绑定中指定,它可能会退回到系统设置。当然,您可以直接从转换器中使用当前线程的文化。但现在我将显而易见的作为一种解决方法;)
  • 哈哈!事实上,我宁愿知道应用程序正确地使用了文化,而不是强制转换。我的系统设置为 en-GB,这让我觉得这更加陌生......

标签: c# wpf globalization cultureinfo


【解决方案1】:

link 声明您可能需要添加以下内容:

FrameworkElement.LanguageProperty.OverrideMetadata(
  typeof(FrameworkElement), 
  new FrameworkPropertyMetadata(
    XmlLanguage.GetLanguage(
      System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag)));

【讨论】:

    【解决方案2】:

    如果您创建了一个线程,则文化信息将重置为默认值(针对该线程)。我认为在 .net 4.5 中可能有一种设置默认线程文化信息的方法。 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture.aspx

    【讨论】:

      猜你喜欢
      • 2010-12-06
      • 1970-01-01
      • 2013-12-17
      • 2020-06-17
      • 1970-01-01
      • 2022-10-10
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多