Вы должны создать файл plist, который вы локализуете, в вашем хранилище plist правильный идентификатор локали для соответствующей локализации, когда вы используете свой фрагмент кода, вы должны загрузить локаль из этого локализованного файла plist и использовать ее для полученияотображаемое имя.
Таким образом, ваша локаль всегда будет соответствовать языку интерфейса на экране.Мне нужно было сделать это для некоторых дат, которые я хотел отформатировать, и не полагаться на систему, так как формат календаря мог быть установлен на другом языке для системы ...
надеюсь, что это поможет ...
![enter image description here](https://i.stack.imgur.com/6pFwy.png)
- (NSDictionary*)getLocalizedCalendarStrings{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"calendar" ofType:@"plist"]; // will return the path of the plist in the right language-specific .lproj directory)
NSDictionary* calendar = [NSDictionary dictionaryWithContentsOfFile:plistPath];
return calendar;
}
И используйте это так:
NSDictionary * calendar = [self getLocalizedCalendarStrings];
NSString * localeIdentifier = [calendar objectForKey:@"locale_identifier"];
[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: localeIdentifier]
Чтобы избежать риска того, что эти строки локали будут введены с ошибкой и т. Д., Или если вы хотителучшее решение, ориентированное на код, вы, конечно, могли бы использовать свойство с именем default_language в качестве BOOL в plist и установить его в YES только для английского, в вашем коде просто проверьте это значение и, если оно НЕТ, то получите локаль устройства,если это ДА, тогда вы знаете, что приложение либо на английском, потому что это настройка устройства, либо на английском, потому что оно не поддерживает текущую локаль устройства и поэтому по умолчанию переключилось на английский ...должно быть «default_language» ДА, жестко закодировать локаль в en_US или en_UK, если вы патриотичный британец ...
Что-то в этом примере может решить вашу проблемупроблема, категория для NSLocale, но, конечно, для этого вам нужно иметь локализованный список для каждого языка, который вы поддерживаете ...
@implementation NSLocale (AppLocale)
+(NSString*)applicationCurrentLocale{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"currentLocale" ofType:@"plist"];
NSDictionary* currentLocaleData = [NSDictionary dictionaryWithContentsOfFile:plistPath];
if([[currentLocaleData objectForKey:@"english_default"] boolValue] == YES){
return @"en_US";
}else{
NSString * deviceLocaleIdentifier = [[NSLocale currentLocale] localeIdentifier];
return [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:deviceLocaleIdentifier];
}
}
@end