Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVVM conform localization in WPF Applications

How can I localize an WPF Application using the MVVM Pattern? I really want to do it the "right" way.

My current approach is that I use .resx Resource files to localize my application.

Solution Explorer VS 2012

I included them in my xaml code

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

and access them like this:

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

My Questions:

  1. Is there a better way to do it?
  2. How can i test the different languages (load application with different language settings)?
  3. Is it possible to change the language at runtime?

Answers:

Question 1:

Question 2: (Thank you, stijn)

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

Question 3: (Thank you, stijn)

Not really, it is necessary to redraw the complete window.

like image 965
Joel Avatar asked Mar 07 '13 10:03

Joel


1 Answers

This is the appropriate way to do it, as far as I'm concerned. To switch languages, change the culture used by the localization class:

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

Since all strings are fetched at runtime (all calls in the generated Designer.cs files look like ResourceManager.GetString( "SomeString", resourceCulture ); and resourceCulture is what gets set by the call above, this affects what you get at runtime. However supose you use the values in menu items etc from within xaml, you have to rebuild the entire menu before this takes effect.

like image 141
stijn Avatar answered Sep 20 '22 11:09

stijn