#ios #localization #storyboard #xcode5
#iOS #локализация #раскадровка #xcode5
Вопрос:
У меня есть раскадровка с базовой локализацией (сама раскадровка не локализована) Я хочу использовать базовую локализацию для локализации приложения и при этом иметь возможность изменять локализацию внутри самого приложения.
Прямо сейчас я доволен таким подходом —
(NSString*)localizedStringForKey:(NSString*) key
{
NSBundle* languageBundle = [self localizationBundle];
NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
return str;
}
Но это работает только для динамических строк, которые я назначаю в коде.
Есть ли какой-либо способ заставить раскадровку использовать определенную базовую локализацию или я должен отказаться от использования этой опции и создать все строки в коде?
Спасибо, Шани
Ответ №1:
Вы можете реализовать тот же метод для раскадровки, что и для строк:
// Utils class...
(NSString *)localizedStoryboardForName:(NSString *)key
{
NSBundle *languageBundle = [self localizationBundle];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:key bundle:languageBundle];
return storyboard;
}
Если у вас есть основная раскадровка, определенная в списке проекта, удалите эту запись и создайте явно в AppDelegate.
// AppDelegate class...
UIStoryboard *storyboard = [Utils localizedStoryboardForName:@"Main"];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:[storyboard instantiateInitialViewController]];
[self.window makeKeyAndVisible];
Затем создайте раскадровки с разными языками внутри. Они должны быть локализованы так же, как файлы Localizable.strings.
Комментарии:
1. @Artel Stepanenko Это не сработает, если вы включили классы размеров для своей раскадровки и используете локализуемые строки для своих переводов раскадровки. В этом случае возникает исключение («Похоже, что в path нет действительной скомпилированной раскадровки …»). Есть идеи, как справиться с этой проблемой?