Frage

Ich habe ein iPhone Storyboard mit einigen Ansichten. Zum Beispiel wird ein Navigationselemententitel benannt News, was für andere Sprachen übersetzt werden sollte.

Wenn ich meinem Storyboard eine neue Lokalisierung hinzufüge, wurde ein Duplikat meines aktuellen Storyboards für die neue Sprache erstellt. Hier kann ich den Titel für den Navigationselement ändern, aber für mich scheint es nicht sehr nützlich zu sein. Was ist, wenn mein Storyboard 100 Ansichten enthält und ich 10 Sprachen unterstützen muss? Wenn ich etwas in meinem ursprünglichen Storyboard ändern muss, muss ich für alle Sprachen die gleichen Änderungen vornehmen. Das scheint sehr seltsam. In welchen Situationen können dies nützlich sein?

Was kann ich stattdessen tun? Soll ich nur das englische Storyboard haben und jedes Element im ViewController manuell übersetzen NSLocalizedString?

War es hilfreich?

Lösung

Sie können die Lokalisierung durchführen, indem Sie die Titel der UI -Elemente im Code ändern:

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

Wenn Sie beispielsweise Ihre App in Niederländisch lokalisieren möchten, hätten Sie dies in Dutch.lproj/Localizable.strings:

"News" = "Nieuws";

Sie können dies dann für jedes UI -Element und jede Sprache tun.

Andere Tipps

In iOS 6 gibt es eine Projekteinstellung unter der Registerkarte "Info" mit der Aufschrift "Verwenden Sie die Basi Internationalisierung". Wenn Sie das Kontrollkästchen überprüfen, wird alle Saiten aus dem Storyboard in internationalisierte .Strings -Dateien herausgezogen.

Auf diese Weise müssen Sie nicht mehrere Kopien des Storyboards haben.

enter image description here

Ab iOS 6 können Sie sich entscheiden, die Basis -Internationalisierung zu verwenden: Alle Storyboard- und XIB/NIB -Dateien existieren nur einmal in einem Ordner namens Base.lproj. Die Lokalisierung der GUI -Elemente wird in verwandten .Strings -Dateien in jedem Lokalisierungsverzeichnis platziert.

Zum Beispiel wird "mainstoryboard.storyboard" in Base.lproj platziert. Eine zugehörige Datei namens "Mainstoryboard.Strings" wird in en.lproj und in welcher Lokalisierung, die Sie anwenden, platziert.

Dies ist wirklich sehr gut aussehend, besonders in Kombination mit Layoutbeschränkungen!

Möglicherweise finden Sie dieses Video -Tutorial hier nützlich:

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

Der Ansatz besteht darin, ein separates Storyboard für jede Sprache zu haben, um sich zu lokalisieren, und lassen Sie ein Skript sich um die Verbreitung der Änderungen im Original -Storyboard für alle anderen Sprachen kümmern.

Für Apps mit einem Bereitstellungsziel von iOS 5 und Storyboards verwende ich so etwas, um meine Registerkarten zu lokalisieren, auf denen mein erster ViewController auf einem Storyboard ein ist 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
    }

    // ...
}

und so etwas in meinem Localizable.strings Dateien:

// MARK: TabBar
"tabBarItem0" = "My First Tab Label";
"tabBarItem1" = "My Second Tab Label";
"tabBarItem2" = "My Third Tab Label";

Möglicherweise finden Sie auch Polyglot -Lokalisierung nützlich. Wenn Sie nsLocalizedString () in Code aufrufen, können Sie den Schlüssel in Ihrem Storyboard direkt angeben. Sie können unnötige Filialen vermeiden und den Code des Boilerplate reduzieren.

https://github.com/negusoft/polyglot

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top