【发布时间】:2015-12-31 09:04:50
【问题描述】:
当我有一个带有大写字母的 UI 字符串时,我习惯于将它们定义为小写字母,然后使用uppercaseStringWithLocale:[NSLocale currentLocale]。
但最近我碰巧注意到[NSLocale currentLocale] 可能不是您的应用中使用的那个。例如,如果您的设备使用土耳其语,但您的应用仅支持英语,则 currentLocale 将是土耳其语区域设置,而您的应用本地化为英语。
使用这些设置,使用[NSLocale currentLocale] 的直接效果是我的大写字符串将是“İ LİKE İOS”而不是“I LIKE IOS”。
到目前为止,我看到的唯一解决方法是创建一个 NSLocale 类别来添加 +(NSLocale*) applicationLocale; 并在所有 uppercaseStringWithLocale: 中使用它。
+ (NSLocale*) applicationLocale
{
NSMutableDictionary<NSString*,NSString*>* localeComponents = [[NSLocale componentsFromLocaleIdentifier:[NSLocale currentLocale].localeIdentifier] mutableCopy];
localeComponents[NSLocaleLanguageCode] = NSBundle.mainBundle.preferredLocalizations.firstObject;
return [NSLocale localeWithLocaleIdentifier:[NSLocale localeIdentifierFromComponents:localeComponents]];
}
我的问题很简单:我这样做是对的还是我错过了什么?我确实想知道为什么 Apple 会链接到 currentLocale,而在很多情况下它不会按预期工作。
【问题讨论】:
标签: ios localization uppercase nslocale