在iPhone上,用户可以选择显示语言和用于格式化的区域
显示语言相当于.NET的Thread.CurrentUICulture
,即UI的语言
格式化区域等同于.NET的Thread.CurrentCulture
,即用于格式化数字,日期等的文化设置。
假设以下设置:
语言:英语
地区:德国
在iOS6中,NSLocale.CurrentLocale将返回"de_DE"
,我可以轻松转换为CultureInfo
对象。
然而,从那以后,情况发生了变化
例如,在iOS8上,我得到"en_DE"
这是CultureInfo
的无效值。
那么,确保我的Xamarin.iOS应用程序考虑用户选择的设置的首选方法是什么,即如何获得Thread.CurrentCulture
的正确值?
答案 0 :(得分:3)
我想我刚回答了自己的问题:
只要用户没有在Regions高级设置中明确关闭“自动”并将该语言更改为德语,将区域更改为德国实际上不会更改格式。只有在这种情况下,格式才真正与UI语言不同。
基于此,我现在正在使用此代码:
private static CultureInfo GetFormattingLanguage()
{
try
{
return CultureInfo.GetCultureInfo(
NSLocale.CurrentLocale.LocaleIdentifier.Replace('_', '-'));
}
catch (CultureNotFoundException)
{
return CultureInfo.GetCultureInfo(NSLocale.CurrentLocale.LanguageCode);
}
}