当我有一个包含大写字母的UI字符串时,我习惯于将它们定义为与所有其他字符串一样的小写,然后使用uppercaseStringWithLocale:[NSLocale currentLocale]。
但最近我碰巧注意到[NSLocale currentLocale]可能不是你的应用程序中使用的那个。例如,如果你的设备是土耳其语,但你的应用程序只支持英语,那么currentLocale将是土耳其语言环境,而你的应用程序是英语本地化的。
有了这些设置,使用[NSLocale currentLocale]的一个直接效果是我的uppercaseString将是"İ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]];
}我的问题很简单:我这样做是正确的,还是我错过了什么?我确实想知道为什么苹果会连接到currentLocale,而它在很多情况下都不会像预期的那样工作。
发布于 2015-12-31 17:39:26
获取应用程序区域设置的最可靠方法是编辑Localizable.strings文件。在英文本地化文件中添加一个条目
"lang"="en";在德语本地化文件中添加一个条目
"lang"="de";在法语本地化文件中添加一个条目
"lang"="fr";以此类推。您可以使用NSLocalizedString(@"lang")获取本地化代码。
https://stackoverflow.com/questions/34543863
复制相似问题