Принудительная раскадровка для представления конкретной базовой локализации

#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 нет действительной скомпилированной раскадровки …»). Есть идеи, как справиться с этой проблемой?