Я работаю над приложением 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» ... как на Земле это происходит? Как исправить это, чтобы приложение действительно использовало правильную культуру системы?
Просто догадаться, но, возможно, оно возвращается к системному настройке, если не указано в привязке. Конечно, вы можете использовать культуру текущего потока непосредственно из своего конвертера. Но теперь я утверждаю очевидное как обходное решение;) – Silvermind
HAHA! В самом деле, я бы предпочел знать, что приложение правильно использует культуру, а не принудительно конвертирует. Моя система настроена на en-GB, что делает это еще более странным для меня ... – Jammer