Когда у меня есть строка пользовательского интерфейса с заглавными буквами, я обычно определяю их строчными буквами, как и все остальные, а затем использую uppercaseStringWithLocale:[NSLocale currentLocale]
.
Но недавно я случайно заметил, что [NSLocale currentLocale]
может быть не тем, что используется в вашем приложении. Например, если ваше устройство на турецком языке, но ваше приложение поддерживает только английский язык, currentLocale будет турецким языковым стандартом, а ваше приложение локализовано на английском языке.
С этими настройками прямое влияние использования [NSLocale currentLocale]
заключается в том, что моя строка верхнего регистра будет выглядеть как «Я НРАВИТСЯ IOS» вместо «МНЕ НРАВИТСЯ 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
, хотя во многих случаях это не работает должным образом.