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, вы должны перестроить все меню до того, как это вступит в силу.