Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

"News" = "Nieuws";

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

Другие советы

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

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

enter image description here

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

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

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

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

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

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

Для приложений с целью развертывания 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";

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

https://github.com/negusoft/polyglot

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top