IPhone Lokalisierung: Ist es möglich, ohne nib Dateien leicht zu übersetzen, die die Feder für jede Sprache zu kopieren?

StackOverflow https://stackoverflow.com/questions/619867

Frage

Ich versuche, einen überschaubaren Weg zu finden, jede sichtbare Zeichenfolge in einer iPhone-Applikation zu übersetzen. Die offizielle Apple-Dokumentation sagt .strings Dateien für programmatische Strings zu verwenden, während der eingebauten mit „add lokalisiert Datei“ Option in Xcode nib Dateien zu lokalisieren.

Das Problem, das ich mit diesem zu sehen ist, dass, wenn die Benutzeroberfläche ändern muss nach der Lokalisierung der Fall ist, dann würden wir die Nibs für jede Sprache einzeln aktualisieren müssen, die weniger als optimal ist. Gibt es einen einfacheren Weg, um vielleicht Strings zu binden angezeigt in nib Dateien auf relevante Werte in einem .strings-Datei? oder würde ich muss programmatisch diese Zeichenfolgen für jedes UI-Element gesetzt haben (was etwas besser, aber immer noch ärgerlich)?

War es hilfreich?

Lösung

Das Beste, was Sie tun können, ist rekursiv Schleife durch jede Ansicht und stellen Sie dann den Text auf sie:

static void translateView(NSBundle *bundle, UIView *view)
{
    id idView = view;
    if ([idView respondsToSelector:@selector(text)] && [view respondsToSelector:@selector(setText:)])
        [idView setText:[bundle localizedStringForKey:[idView text] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(title)] && [view respondsToSelector:@selector(setTitle:)])
        [idView setTitle:[bundle localizedStringForKey:[idView title] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(placeholder)] && [view respondsToSelector:@selector(setPlaceholder:)])
        [idView setPlaceholder:[bundle localizedStringForKey:[idView placeholder] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(prompt)] && [view respondsToSelector:@selector(setPrompt:)])
        [idView setPrompt:[bundle localizedStringForKey:[idView prompt] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(titleForState:)] && [view respondsToSelector:@selector(setTitle:forState:)])
        [idView setTitle:[bundle localizedStringForKey:[idView titleForState:UIControlStateNormal] value:nil table:nil] forState:UIControlStateNormal];
    if ([idView isKindOfClass:[UITabBar class]] || [idView isKindOfClass:[UIToolbar class]])
        for (UIBarItem *item in [idView items])
            [item setTitle:[bundle localizedStringForKey:[item title] value:nil table:nil]];
    for (UIView *subview in [view subviews])
        translateView(bundle, subview);
}

Achtung: Sie können von anderen Gruppen von Wählern überprüfen alles zu fangen. Dies ist keine empfohlene Vorgehensweise, aber es scheint, wie viel weniger Arbeit

Andere Tipps

Apples integrierte Befehlszeilenprogramm ibtool können Sie dies tun. Sie können die Saiten von einem XIB-Dump, lokalisieren sie, dann eine neue XIB erstellen, die auf den bestehenden XIB basiert, sondern die lokalisierten Strings. So können Sie immer einen Basissatz von XIBs haben und erstellen sie alle, wenn die lokalisierten Zeichenfolgen ändern. Mehr Infos hier: http://www.bdunagan.com/ 2009/03/15 / ibtool-Lokalisierung-made-easy / .

Ich glaube, Sie wollen über das Kommandozeilen-Tool lesen: ibtool. Es sollte vereinfachen, was Sie suchen zu tun.

Sie können sie automatisch nibs lokalisieren, ohne Duplizierung im Anschluss an diese einfache Anleitung:

http://programminghacks.net/2011 / 06/03 / ios-Feder-Lokalisierung-in-lokalisierbare-strings /

Vielleicht sollten Sie jede Zeichenfolge manuell aktualisieren. Angenommen, Sie haben ein Array haben, oder eine XML-Datei, von Strings in verschiedenen Sprachen, wenn der Benutzer ändert nur die Sprache, die übersetzt Zeichenfolge aus dem Array erhalten und es dann auf der Benutzeroberfläche ändern.

Marco

Ich habe immer alle Strings gesetzt in der viewDidLoad () Methode benötigt nur mit Platzhalter in der .xib. So kann ich jede .xib lokalisieren kann leicht mit nur Aktualisierung .String Dateien

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