2009-07-07 2 views
1

У меня есть два ресурса файлы в папке Свойства в WPF-проекта (VS 2008):Таинственные Ресурсы/поведение CultureInfo в WPF приложения

  • Resources.resx
  • Resources.de-DE.resx

Выбор культуры "де-ДЭ" не работает (нет ошибки, но всегда строки из "Resources.resx" используются):

public App() 
    { 
     UntitledProject2.Properties.Resources.Culture = new CultureInfo("de-DE"); 
    } 

НО: если я переименовать "Resources.de-DE.resx" на "Resources.fr-CA.resx" или "Resources.en-US.resx"

, а затем установить его с помощью

UntitledProject2.Properties.Resources.Culture = new CultureInfo("fr-CA"); 

это работает !! Но почему!? Таинственный ...

+0

То же самое здесь, в VS 2010. :-( –

ответ

0

По умолчанию WPF всегда будет использовать «en-US»; по крайней мере, это было в последний раз, когда я проверил (что было .net 3.5). Если вы хотите WPF вместо этого использовать культуру в настоящее время установлен в системе, вы должны выполнить этот блок кода:

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

Это перекроет значение по умолчанию, используемое для свойства Язык зависимостей в FrameworkElement, который, опять же, является «ан -US "по умолчанию.

Выполняйте этот код один раз и на ранней стадии в течение всего срока службы вашего приложения. Скорее всего, вам больше не придется беспокоиться об этом, если вы не ожидаете, что ваш пользователь переключит культуру в середине выполнения программы ...