MVVM соответствует локализации в приложениях WPF

Как я могу локализовать приложение WPF с помощью шаблона MVVM? Я действительно хочу сделать это "правильным" способом.

Мой текущий подход заключается в том, что я использую файлы ресурсов .resx для локализации моего приложения.

Solution Explorer VS 2012

Я включил их в свой код xaml

xmlns:localization="clr-namespace:ClientLibTestTool.ViewLanguages"

и получить доступ к ним следующим образом:

        <Button x:Name="BtnGenerate" 
                Content="{x:Static localization:localization.ButtonGenerate}"/>

Мои вопросы:

  • Есть ли лучший способ сделать это?
  • Как я могу протестировать разные языки (загружать приложения с разными языковыми настройками)?
  • Можно ли изменить язык во время выполнения?

Ответы:

Вопрос 1:

Вопрос 2: (Спасибо, stijn)

public MainWindow()
{
    // Debug Settings
    localization.Culture = CultureInfo.GetCultureInfo("en-US");
    // localization.Culture = CultureInfo.GetCultureInfo("de-DE");
    this.InitializeComponent();
}

Вопрос 3: (Спасибо, stijn)

Не совсем, нужно перерисовать полное окно.

Ответ 1

Это подходящий способ сделать это, насколько мне известно. Чтобы переключить языки, измените культуру, используемую классом локализации:

localization.Culture = CultureInfo.GetCultureInfo( "de-DE" );

Так как все строки извлекаются во время выполнения (все вызовы в сгенерированных файлах Designer.cs выглядят как ResourceManager.GetString( "SomeString", resourceCulture ); и resourceCulture - это то, что установлено вышеописанным вызовом, это влияет на то, что вы получаете во время выполнения. Однако предположим, что вы используете значения в пунктах меню и т.д. изнутри xaml, вы должны перестроить все меню до того, как это вступит в силу.