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