2009-07-07 9 views

Antwort

11

Eine Lösung besteht darin, mehrere lokalisierte Nib-Dateien zu erstellen. Dies funktioniert wahrscheinlich am besten, wenn Ihre Lokalisierungsanforderungen sehr einfach sind und Sie Ihre Ressourcen am Ende der Entwicklung einfach an Expertensoftware-Lokalisierer übergeben.

Wenn Sie während der Entwicklung lokalisieren und sich die Benutzeroberfläche schnell ändert, können doppelte NIB-Dateien sehr schmerzhaft sein, da jeder UI-Tweek in jeder lokalen Version der NIB dupliziert werden muss. Um dies zu vermeiden, müssen Sie in Ihren View-Controllern Code schreiben, um die lokalisierten Zeichenfolgen zu steuern, normalerweise in der -viewDidLoad-Methode des View-Controllers. Stellen Sie sicher, dass jedes Steuerelement mit lokalisiertem Text ein IBOutlet ist und verdrahtet sie mit Ihrem View-Controller in IB. Dann -viewDidLoad Ihre Ansicht Controller wird wie folgt aussehen:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    hello.text = NSLocalizedString(@"Hello", @"Hello label"); 
    world.text = NSLocalizedString(@"world", @"world label"); 
    // ... etc 
} 

Sie tun, um diese Art der Ansicht Setup in -viewDidLoad da die Objekte in Ihrer Feder nicht vollständig erstellt, bis nach Ihre -init Methode ausgeführt wird. -viewDidLoad läuft nach -init aber bevor Ihre Sicht sichtbar wird.

3

Sie können mehrere Versionen einer .nib-Datei für jedes Gebietsschema erstellen. Es gibt auch Werkzeuge, mit denen Sie die Strings in ihnen einfach bearbeiten können. Apple hat dazu pretty good documentation.

2

Ich war auch auf der Suche nach einer Lösung, nicht unbedingt für iPhone, aber XCode/IB im Allgemeinen. Alle Referenzen haben sich nicht mit der Tatsache befasst, dass Sie intern möglicherweise einen Schlüssel benötigen, um einen Status anzuzeigen, und eine lokalisierte Zeichenfolge für den Benutzer in einer diesem Schlüssel entsprechenden Beschriftung oder Textzelle anzeigen möchten. Ich habe im ersten Schritt keinen Standardansatz gefunden, wie z. ein Schlüsselwert für einen Schlüssel in gemeinsamen Benutzerstandardeinstellungen und Anzeige der lokalisierten Zeichenfolge für diesen Schlüsselwert in einer Beschriftung.

Ich fand eine Lösung, die nicht viele Codierung benötigt und mit den Bindungen in ib konform ist.

Zuerst geben Sie eine Datei Localizable.strings an, z. mit einer Linie mit enthalten

"MyKeyValue" = "Localized display label"; 

Jetzt können Sie den Schlüsselwert lokalisieren: NSLocalizedString (aKeyValue, nil).

In der Bezeichnung haben Sie keinen Werttransformer gefunden, der mit NSLocalized String arbeitet. So habe ich eine Klasse KeyToLocalizedStringTransformer einen Schlüsselwert in eine lokalisierte Zeichenfolge zu transformieren:

@interface KeyToLocalizedStringTransformer : NSValueTransformer {} 

@implementation KeyToLocalizedStringTransformer 

+ (Class)transformedValueClass 
{ 
    return [NSString class]; 
} 

+ (BOOL)allowsReverseTransformation 
{ 
    return NO; 
} 

- (id)transformedValue:(id)aValue 
{ 
    NSString *NLString = [NSString stringWithString:NSLocalizedString(aValue,nil)]; 
return NLString; 
} 

Letzter Schritt ist die Vorbereitung für den Transformator registrieren z.B. in + initialisieren:

NSValueTransformer *transformer = [[KeyToLocalizedStringTransformer alloc] init]; 
[NSValueTransformer setValueTransformer:transformer forName:@"KeyToLocalizedStringTransformer"]; 

Jetzt können Sie einen Wert Transformator in den Bindungen für das Textfeld oder eine Zelle verwenden (einfach den Namen eingeben, wenn Sie nur die NSUnArchiveFromData sehen und so weiter ...)

Sorry kein Bild hier von IB, denn ich bin neu hier und "habe keinen Ruf": Sie müssen sich die Bindung an den gemeinsamen Benutzer defaults Controller, Kontroller Schlüssel: Werte, Model Key Path: MyStateKey und einen Wert vorstellen Transformator wie beschrieben.

Als Ergebnis müssen Sie nichts in der nl duplizierten Nib mit der Bezeichnung tun, einfach übersetzen Sie die Zeichenfolge in den Localizable.strings.

0

von iOS 7 & Xcode 5 auf, sollten Sie vermeiden, NSLocalizedString wo möglich zu verwenden. Die bevorzugte Methode heißt "Basislokalisierung" und funktioniert über das Storyboard. Es wird Ihnen viel Arbeit ersparen. Wenn Sie nach "Basislokalisierung" googlen, werden Sie genug Tutorials finden, um Sie zum Laufen zu bringen

Verwandte Themen