Unter der Lokalisierung einer Anwendung versteht man allgemein die Übersetzung und Anpassung der Oberfläche in eine andere Spache. Wie das in XCode für XIB Dateien und im Quellcode durchgeführt wird soll dieses kleine Beispiel zeigen.
Wir starten mit einem neuen Projekt und wählen als Vorlage das View-based Application Template. Als Name habe ich LocalizationTest gewählt.
Wir öffnen die LocalizationTestViewController.h Datei und erweitern die Interface Definition um 2 UILabels:
@interface LocalizationTestViewController : UIViewController {
IBOutlet UILabel *label1;
IBOutlet UILabel *label2;
} |
Als nächstes öffnen wir den Interface Builder durch Doppelklick auf die LocalizationTestViewController.xib Datei und fügen dort 3 UILabel Controls hinzu. Die ersten beiden verlinken wir durch CTRL-Klick und ziehen auf das File’s Owner Objekt mit den beiden Definitionen im View Controller label1 und label2. Das dritte Label füllen wir mit statischem englischen Text.
Wir gehen zurück in XCode und öffnen das Info Fenster für LocalizationTestViewController.xib. Unten links im General Tab befindet sich der Make File Lokalizable Button. Durch Klicken des Buttons wird für die .xib Datei die englische Default Loaklisierung angelegt. Durch Klick auf den Add Lokalization Button wird eine neue Version für die angegebene Sprache erstellt. Dafür müssen die 2 Buchstaben ISO Codes verwendet werden.
Im XCode ist jetzt ein kleiner Pfeil zum Aufklappen vor der LocalizationTestViewController.xib Datei aufgetaucht. Darunter finden wir die .xib Dateien für die angelegten Sprachen. Diese können normal geöffnet und bearbeitet werden. In unserem Fall ersetzen wir den englischen Text des dritten Labels durch einen deutschen. An den ersten beiden brauchen wir keine Änderung durchführen da wir deren Inhalt dynamisch im Code ändern werden.
Damit ist der erste Teil der Lokalisierung abgeschlossen.
Als nächstes erweitern wir die viewDidLoad Methode in LocalizationTestViewController.m um folgenden Code:
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
NSLocale* curentLocale = [NSLocale currentLocale];
label1.text = [NSString stringWithFormat:
NSLocalizedString(@"The current locale is: %@",
@"String used to display the current locale."),
[curentLocale displayNameForKey:NSLocaleIdentifier
value:[curentLocale localeIdentifier]]];
label2.text = NSLocalizedString(@"This is my default value.", @"This is a comment about my default value string.");
[super viewDidLoad];
} |
Die wichtigste Funktion hier ist NSLocalizedString. Der erste Parameter ist der Key für die Sprachen Dateien und fungiert auch als Default Wert. Der zweite Parameter ist ein Kommentar, der später in der generierten Sprach Datei erscheint.
Für das erste UILabel erzeugen wir einen lokalosierbaren String mit Platzhalter, an dem wir das vom Benutzer eingestellte Local mit Hilfe der NSLocale Klasse ausgeben.
Für das zweite UILabel erzeugen wir mit einem einfacheren Beispiel nur einen einfachen String zur Ausgabe.
Um jetzt die Strings im Code zu lokalisieren müssen wir XCode leider verlassen. Wir öffnen ein Terminal Fenster und springen in das Hauptverzeichnis der Anwendung. Dort führen wir das folgende Kommando aus:
Dies erzeugt uns die Datei Localizable.strings mit folgendem Inhalt:
/* String used to display the current locale. */
"The current locale is: %@" = "The current locale is: %@";
/* This is a comment about my default value string. */
"This is my default value." = "This is my default value."; |
Diese müssen wir jetzt unserem Projekt hinzufügen. Wir klicken dafür mit der rechten Maustaste auf den Reources Ordner und wählen Add existing File und dann Localizable.strings aus. Als Text Encoding wählen wir UTF-16.
Der weitere Ablauf ist analog der Lokalisierung der .xib Datei. Wir öffnen das Info Fenster für Localizable.strings, klicken auf Make File Lokalizable, dann auf den Add Lokalization Button und fügen dann de hinzu.
Jetzt öffnen wir die deutsche Version von Localizable.strings und ändern diese entsprechend ab:
/* String used to display the current locale. */
"The current locale is: %@" = "Das aktuelle Schema ist: %@";
/* This is a comment about my default value string. */
"This is my default value." = "Das ist mein Default Wert."; |
Damit haben wir auch die Lokalisierung des Quellcode abgeschlossen.
Das XCode Projekt findet ihr hier.