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的解释.