iOS - Как программно изменить язык приложения в строках раскадровки?

Я разрабатываю приложение, в котором пользователь может изменить язык в любое время. Я сделал это в демонстрационном приложении. Работает нормально. Но есть проблема с этим, то есть для приложения локализации я должен выполнить следующие 2 задачи.

Шаг 1: Мне нужно создать выход IB для каждого объекта (т.е. в каждом классе ==> кнопки, метки, textFields, TextViews).

Шаг 2: Я должен установить язык для каждого объекта, например: [myButton setTitle:[Language get:@"Language Test" alter:nil] forState:UIControlStateNormal]; ИЛИ ЖЕ myLabel.text=LocalizedString(@"Forgot Passoword");

У меня есть проект, который имеет много экранов, около 60 экранов (в раскадровке). К сожалению, в этом проекте нет выхода IB для всех объектов. Строки устанавливаются через раскадровку. Теперь я должен сделать поддержку этого приложения на другом языке также (текущий язык английский) название арабский язык.

Вывод: если я делаю выше 2 шага (создайте выход IB для каждого объекта, затем напишите код в файл.m для каждого объекта). Это займет очень много времени. Есть ли другие лучшие варианты, пожалуйста? Я хочу не хочу создавать IB выход и кодирование в.m файле. Любое предложение будет отличным!

Что я сделал до сих пор:

Следуйте этим учебникам:

(1). Как заставить NSLocalizedString использовать определенный язык

и примеры проектов:

(1). https://github.com/tonisalae/TSLanguageManager

(2). https://github.com/object2dot0/Advance-Localization-in-ios-apps

Мой код:

пример звонков:

[Language setLanguage:@"it"];

ИЛИ ЖЕ

[Language setLanguage:@"de"];


+(void)initialize {
        NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
        NSArray* languages = [defs objectForKey:@"AppleLanguages"];
        NSString *current = [languages objectAtIndex:0];
        [self setLanguage:current];

    }

        +(void)setLanguage:(NSString *)l {
        NSLog(@"\n\n\t ***** Hint Lang. selected by user: %@   ****\n\n", l);
        NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
        bundle = [NSBundle bundleWithPath:path];
    }

        +(NSString *)get:(NSString *)key alter:(NSString *)alternate {
        return [bundle localizedStringForKey:key value:alternate table:nil];
    }

1 ответ

Вы можете добиться этого, используя определяемый пользователем атрибут времени выполнения. Перейдите по этой ссылке для подробностей.

Другие вопросы по тегам