2013-09-24 1 views
1

Я работаю над приложением 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» ... как на Земле это происходит? Как исправить это, чтобы приложение действительно использовало правильную культуру системы?

+1

Просто догадаться, но, возможно, оно возвращается к системному настройке, если не указано в привязке. Конечно, вы можете использовать культуру текущего потока непосредственно из своего конвертера. Но теперь я утверждаю очевидное как обходное решение;) – Silvermind

+0

HAHA! В самом деле, я бы предпочел знать, что приложение правильно использует культуру, а не принудительно конвертирует. Моя система настроена на en-GB, что делает это еще более странным для меня ... – Jammer

ответ

2

Это link утверждает, что вы, возможно, придется добавить следующее:

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