Как локализовать раскадровку iOS - PullRequest
55 голосов
/ 29 ноября 2011

У меня есть раскадровка iPhone с некоторыми представлениями. Например, заголовок элемента навигации называется News, что должно быть переведено для других языков.

Когда я добавляю новую локализацию в свою раскадровку, она создает копию моей текущей раскадровки для нового языка. Здесь я могу изменить название для элемента навигации, но для меня это не кажется очень полезным. Что если моя раскадровка содержит 100 просмотров и мне нужно поддерживать 10 языков? Если мне нужно что-то изменить в моей исходной раскадровке, я должен сделать одинаковые изменения для всех языков. Это кажется очень странным. В каких ситуациях это может быть полезно?

Что я могу сделать вместо этого? Должен ли я иметь только английскую раскадровку и вручную переводить каждый элемент в ViewController, используя NSLocalizedString?

Ответы [ 7 ]

108 голосов
/ 04 октября 2012

В iOS 6 есть вкладка Project на вкладке Info, которая гласит «Использовать базовую интернационализацию».Если вы установите флажок, он вытянет все строки из раскадровки в интернационализированные файлы .strings.

Таким образом, вам не нужно иметь несколько копий раскадровки.*enter image description here

39 голосов
/ 21 июля 2012

Начиная с iOS 6, вы можете решить использовать базовую интернационализацию: все раскадровки и файлы xib / nib существуют только один раз в папке Base.lproj. Локализация элементов графического интерфейса помещается в соответствующие файлы .strings в каждом каталоге локализации.

Например, «MainStoryboard.storyboard» будет размещен в Base.lproj. Связанный файл с именем "MainStoryboard.strings" помещается в en.lproj и независимо от используемой локализации.

Это действительно очень красиво, особенно в сочетании с ограничениями макета!

10 голосов
/ 06 декабря 2011

Вы можете выполнить локализацию, изменив заголовки элементов пользовательского интерфейса в коде:

self.title = NSLocalizedString("News", nil);

Если вы хотите, например, локализовать свое приложение на голландском языке, вы должны иметь это в Dutch.lproj/Localizable.strings:

"News" = "Nieuws";

Затем вы можете сделать это для каждого элемента интерфейса и языка.

6 голосов
/ 13 марта 2012

Вы можете найти это видео-урок здесь полезным:

http://www.youtube.com/watch?v=cF1Rf02QvZQ

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

3 голосов
/ 27 марта 2013

Для приложений с целью развертывания iOS 5 и раскадровок я использую что-то подобное для локализации своих вкладок, где мой первый ViewController на раскадровке имеет вид UITabBarController:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // ...

    if ([self.window.rootViewController isKindOfClass:UITabBarController.class]) {
        UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController;

        // Localize tab items
        NSArray *tabBarItems = tabBarController.tabBar.items;

        [tabBarItems enumerateObjectsWithOptions:NSEnumerationConcurrent 
                                      usingBlock:^(UITabBarItem *item, NSUInteger tabIndex, BOOL *stop) {
            NSString *keyName = [NSString stringWithFormat:@"tabBarItem%i", tabIndex];
            item.title = NSLocalizedString(keyName, @"TabBarItems");
        }];
    } else {
        // The root view controller is not the UITTabBarController
    }

    // ...
}

и имеет что-то вроде этогов моих Localizable.strings файлах:

// MARK: TabBar
"tabBarItem0" = "My First Tab Label";
"tabBarItem1" = "My Second Tab Label";
"tabBarItem2" = "My Third Tab Label";
2 голосов
/ 12 октября 2015

Вы также можете найти полезную локализацию Polyglot. Вместо вызова NSLocalizedString () в коде, вы можете напрямую указать его ключ в раскадровке. Вы можете избежать ненужных розеток и сократить код шаблона.

https://github.com/negusoft/Polyglot

1 голос
/ 03 августа 2012

Я предлагаю вам изучить командную строку ibtool, которая поможет вам локализовать все ваши раскадровки :) Вот учебник здесь http://www.albertmata.net/articles/introduction-to-internationalization-using-storyboards-on-ios-5.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...