如何正确设置Silverlight CurrentUICulture/CurrentCulture?

rum*_*fx0 7 .net c# silverlight localization cultureinfo

我正在使用C#开发SL5应用程序,我希望将其国际化.我发现以下内容来设置UI文化:

var culture = new CultureInfo(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Run Code Online (Sandbox Code Playgroud)

像DatePicker这样的一些控件似乎可以解决这个问题.如果我使用'd'格式字符串格式化任何日期时间,我仍然会得到默认格式"M/dd/yyyy".

究竟SL如何解释文化以及如何为整个应用程序正确设置?

谢谢

更新:

找到答案:

首先,在Application_Startup中设置适当的文化:

var culture = new CultureInfo("nl-BE");
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Run Code Online (Sandbox Code Playgroud)

然而,关键因素是添加以下内容以强制RootVisual的文化/语言:

var root = RootVisual as Page;
if (root != null)
{
    root.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
}
Run Code Online (Sandbox Code Playgroud)

ean*_*son 10

编辑:更新了@Rumble找到的信息.

你需要这样做才能将它应用到你的UI对象.

首先在应用程序加载时设置适当的文化.

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");
Run Code Online (Sandbox Code Playgroud)

接下来,您需要设置XML语言属性.

对于Silverlight

var root = RootVisual as Page;
if (root != null)
{
    root.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
}
Run Code Online (Sandbox Code Playgroud)

对于WPF

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(
            XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到WPF的解释.