Multilanguage in WPF

globalization, multilingual, wpf, xaml

Solution

I am using the WPF Localization Extension. It is a really easy way to localize any type of `DependencyProperty` on `DependencyObject`s.

- is in a real stable state

- supports binding-like writing style like `Text = {LocText ResAssembly:ResFile:ResKey}`

- works with the .resx-fallback mechanism (e.g. en-us -> en -> independent culture)

- supports culture forcing (e.g. "this has to be English all the time")

- works with normal dependency properties

- works with control templates

- can be used in XAML (really :P) without any additional namespaces

- can be used in code behind to bind localized values to dynamic generated controls

- implements `INotifyPropertyChanged` for advanced use

- supports string formatting e.g. `"this is the '{0}' value"`

- supports prefix and suffix values (currently with `LocText` extension)

- is in use in productive systems (like my public relation product)

- switching of the language to runtime affects NO timeslice

- can be used with any resource file (`.resx`) across all assemblies (also the dynamic loaded one at runtime)

- doesn't need any initializing process (like "call xyz to register a special localize dictionary")

- is available at design-time (MS Expression Blend, MS Visual Studio 2008 (Normal and SP1)

- change of the chosen language is possible at design-time

- can localize any type of data type, as long as a converter (`TypeConverter`) for it exists (extends `LocalizeExtension`)

- has built in support for `Text`, upper `Text`, lower `Text`, `Image`s, `Brush`es, `Double` and `Thickness`

- doesn't affects any memory leaks

- leaves the `UID` property untouched

- offers a `SpecificCulture` to use as `IFormatProvider` (e.g. `(123.20).ToString(LocalizeDictionary.SpecificCulture) = "123.20"` or `"123,20"`)

- offers some functionality to check and get resource values in code behind

- doesn't alter the culture on `Thread.CurrentCulture` or `Thread.CurrentUICulture` (can be changed easily)

Problem

Can you recommend a good way to implement a Multilanguage system for a WPF app? The method I'm using right now involves XML, classes and a xaml extension. It Works fine in most of cases, but when I have to deal with dynamic labels or dynamic text in general it require some extra effort. I would like to let the programmer working only in the main problem and forgot the lang issues.

Original source

Related problems