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 ответ
Вы можете добиться этого, используя определяемый пользователем атрибут времени выполнения. Перейдите по этой ссылке для подробностей.