изменение языка только после перезагрузки на iphone - PullRequest
5 голосов
/ 06 мая 2011

Я пытаюсь сменить язык приложения, но когда я запускаю этот код в main.h, язык меняется после того, как я закрываю приложение и запускаю его снова.Можно ли изменить язык без перезагрузки?

int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSArray *languages = [NSArray arrayWithObject:@"en_GB"];
    [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] synchronize];

    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

1 Ответ

3 голосов
/ 06 мая 2011

Обновление ответа «Как изменить языки в приложении»

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...