Изменить локализацию при активации - PullRequest
0 голосов
/ 22 августа 2011

Мне нужно изменить локализацию приложения iOS, когда оно станет активным.

Итак.

У меня есть выбор языка в настройках, выполненных через settings.bundle в файле main.m,Я читаю такие настройки

int main(int argc, char *argv[]) {
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
    // --
    NSString *appLang = [[NSUserDefaults standardUserDefaults] stringForKey:@"appLang"];

    if (appLang == nil)
        [[NSUserDefaults standardUserDefaults] setValue:[[NSLocale preferredLanguages] objectAtIndex:0] forKey:@"appLang"];

        [[NSUserDefaults standardUserDefaults]
         setObject:[NSArray arrayWithObjects:[[NSUserDefaults standardUserDefaults] stringForKey:@"appLang"], nil]
         forKey:@"AppleLanguages"];

        [[NSUserDefaults standardUserDefaults] synchronize];
        [appLang release];
        // --
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        [pool release];
        return retVal;
    }

Итак, приложение меняет изображения для разных языков, используя данные из настроек.

Сейчас я использую условия для определения языка, подобного этому:

if ([[[NSLocale preferredLanguages] objectAtIndex:0] isEqual:@"en"])

Все отлично работает, но вопрос в том, могу ли я изменить локализацию приложения (используя мой метод), когда приложение становится активным (applicationWillEnterForeground или что-то в этом роде)?И как я могу это сделать?

1 Ответ

0 голосов
/ 22 августа 2011

Вы можете слушать UIApplicationWillEnterForegroundNotification в вашем контроллере представления. Вы можете сделать это так:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil];

Когда приложение выйдет на передний план, будет вызвано myFunc, и вы сможете все настроить - установить правильную локализацию, переключать изображения и т. Д.


Я не знаю, является ли это именно тем, что вам нужно, но при условии, что у вас есть UIImageVIew с именем myImage и вы хотите загрузить новое изображение в этот контейнер, вы просто устанавливаете его свойство изображения, вы можете установить свой myFunc вот так:

- (void) myFunc {
    /* 
    set localization parameters
    */ 
    // set image
    myImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%@.jpg", appLang]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...