Wenn ich Text programmgesteuert zuweisen, kann ich NSLocalizedString (....) verwenden, aber wenn ich den Text direkt in IB schreibe (sagen wir zu einem UILabel), wie lokalisiere ich ihn?Wie verwende ich NSLocalizedString in IB [iPhone SDK]?
Antwort
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.
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.
Dies ist ein großes und komplexes Thema. Ein guter Startplatz ist Introduction to Internationalization Programming Topics und es gibt auch Preparing Your Nib Files for Localization
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.
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
- 1. Wie verwende ich Shake API im iPhone SDK 3.0?
- 2. iPhone: NSLocalizedString im Schnittstellen-Generator?
- 3. Wie kann ich IB bauen für mehrere Schirmschicht in iphone
- 4. Wie verwende ich Affdex SDK in Swift?
- 5. Wie erkenne ich Bild in iPhone SDK?
- 6. Unit Testing iPhone-Code, der NSLocalizedString verwendet
- 7. iPhone SDK: IBAction
- 8. Aktualisierungszeit in iphone sdk
- 9. iPhone SDK 3.2 und UIAppFonts
- 10. iPhone SDK: Wie lokalisiere ich eine Klasse?
- 11. Wie verwende ich AVAudioSessionCategoryMultiRoute auf dem iPhone?
- 12. Wie schiebe ich Text (UILabel) in IB?
- 13. iPhone 3.0 SDK vs iPhone 2.0 SDK
- 14. Zufallszahl in iphone sdk?
- 15. Warnungen in iphone sdk
- 16. GoogleAdMobAds in iphone sdk
- 17. iPhone sdk in Linux
- 18. Rasteransicht in iPhone SDK
- 19. Wie verwende ich FitBounds in MapBox Android SDK?
- 20. (iphone sdk) Wenn ich CGAffineTransform (wie CGAffineTransformMakeTranslation) verwende, "verschiebt" das tatsächlich den Rahmen?
- 21. So ändern Sie Ansichtsgröße in IB für iPhone 3.0
- 22. Wie ordne ich diesen Text in iPhone beschriften SDK
- 23. Wie kann ich ändern uiimage Farbe in iPhone SDK xcode
- 24. Wie zeichne ich ein Rechteck von UIViewCotroller in iPhone SDK
- 25. Wie setze ich Hintergrundfarbe für UIWebView in iPhone sdk
- 26. Wie bekomme ich die NSError Nachricht in Iphone SDK?
- 27. Wie bekomme ich ISOCurrencyCode von einem ISOCountryCode in iPhone SDK?
- 28. Wie serialisiere ich ein einfaches Objekt in iPhone SDK?
- 29. Wie verwende ich C++ STL-Container in meiner iPhone App?
- 30. Wie verwende ich ein animiertes .gif in meiner iPhone-Anwendung?