iOS localizable.Strings -Datei für XIB -Dateien?
-
27-10-2019 - |
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?)
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.