Frage

Ich übersetze ein iOS -Projekt in Portugiesisch und habe eine Pt.lproj/Localizable.Strings -Datei erstellt, und ich habe nsLocalizedString () in den Quellcode hinzugefügt. Es funktioniert alles! Mit einem kleinen Problem - die Zeichenfolgen in XIB -Dateien werden nicht übersetzt ... Ich weiß, dass dies jedoch von Design ist.

Ich habe gesehen, dass der Befehl iBtool verwendet werden kann, um Strings aus einer XIB -Datei namens X zu reißen und ihn in eine Datei namens X.Strings zu setzen ... aber meine Frage ist, gibt es eine Möglichkeit, die Saiten von allen XIB zu ziehen Dateien und setzen Sie sie alle in eine .Strings -Datei (z. B. localizable.Strings? oder sogar eine andere namens Xibs.Strings wäre in Ordnung?)

War es hilfreich?

Lösung

Sie haben zwei Optionen, wie Sie XIB -Dateien übersetzen können. Eines ist NSLocalizedString Makros.

Die zweite Option besteht darin, ein separates XIB für jede Sprache bereitzustellen, die Ihre App unterstützt. Sie müssen sie nicht manuell erstellen, Sie können die verwenden ibtool Befehl (Ich nehme an, Ihre Quellsprache ist Englisch und Ziel ist portugiesisch):

ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib

So sammeln Sie Strings in Ihrem Projekt, die Sie verwenden können genstrings Befehl - ich empfehle jedoch, dies zu verwenden Python -Skript So sammeln Sie alle Ihre Saiten - sie kann die Situation gut bewältigen, wenn Sie Ihre App addieren/entfernen müssen

Bearbeiten

Oh und ich fand das Artikel dass ich diesen Trick gelernt habe

Andere Tipps

Ich habe eine Kategorie dazu erstellt, dies zu tun:

@implementation UIView (Localise)

- (void)localise
{
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
        [view localise];
        if ([view isKindOfClass:[UILabel class]]) {
            UILabel *label = (UILabel *)view;
            [label setText:NSLocalizedString(label.text, nil)];
        }
    }];
}

Dann in Ihren Ansichten:

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self localise];
}

Sie müssen Unterstützung für andere UI -Elemente hinzufügen (textfield.PlaceHolder = nsLocal ... bla bla), aber das wird für Uilabel und Kinder den Trick machen.

Wahrscheinlich nicht toll in Bezug auf Leistung, aber erledigt den Job.

Es hängt von der App und der Anzahl der Lokalisierungen ab, aber im Allgemeinen bevorzuge ich separate .xib -Dateien, da sich das Layout ändern kann. Stellen Sie die lokalisierten Dateien in pt.lproj/ein.

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