I am currently working on a system in Arabic (no, I don’t understand Arabic), and I bumped into an issue where Bindings were not respecting my CurrentUICulture.
Digging bit deeper (with the help of a handy decompilation tool) I found a not-so-beautiful line in FrameworkElement.cs
public static readonly DependencyProperty LanguageProperty = DependencyProperty.RegisterAttached("Language", typeof(XmlLanguage), _typeofThis, new FrameworkPropertyMetadata(XmlLanguage.GetLanguage("en-US"), FrameworkPropertyMetadataOptions.Inherits | FrameworkPropertyMetadataOptions.AffectsMeasure));
As you can see, WPF does NOT respect your thread’s CurrentUICulture.
The fix is simple… finding it, on the other hand, was a nightmare.
Just override the metadata as follows:
FrameworkElement.LanguageProperty.OverrideMetadata (typeof (FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
Hope it helps :)