Ответ 1
Обновить ответ "Как изменить языки в приложении"
NSLocalizedString()
(и их варианты) получают доступ к ключу AppleLanguages в NSUserDefaults, чтобы определить, какие настройки пользователя для предпочтительных языков. Это возвращает массив кодов языков, первый из которых задан пользователем для их телефона, а последующие - резервными, если ресурс недоступен на предпочтительном языке.
Вы можете переопределить глобальные настройки для своего собственного приложения, если хотите, используя метод setObject: forKey:, чтобы установить свой собственный список языков так же, как вы это сделали. Это будет иметь приоритет над глобально заданным значением и будет возвращено в любой код вашего приложения, выполняющего локализацию. Код для этого будет выглядеть примерно так:
[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
Примечание. Чтобы быть в безопасности, убедитесь, что вы используете соответствующее предопределенное имя языков.
Ниже приведен фрагмент кода, но вы должны иметь все файлы локализации в своем проекте.
@implementation LocalizeLanguage
static NSBundle *bundle = nil;
+(void)initialize {
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *current = [[languages objectAtIndex:0] retain];
[self setLocalizeLanguage:current];
}
/*
[LocalizeLanguage setLocalizeLanguage:@"en"];
[LocalizeLanguage setLocalizeLanguage:@"fr"];
*/
+(void)setLocalizeLanguage:(NSString *)lang {
NSLog(@"preferredLang: %@", lang);
NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];
}
+(NSString *)get:(NSString *)key alter:(NSString *)alternate {
return [bundle localizedStringForKey:key value:alternate table:nil];
}
@end