Home Tutorials Anfänger HelloWorld 02 - Mehrsprachige Programme entwickeln

iPhone Gewinnspiel

HelloWorld 02 - Mehrsprachige Programme entwickeln PDF Drucken E-Mail
Share
Geschrieben von: Philipp   
TUESDAY, 11 MARCH 2008 15:54
Beitragsindex
HelloWorld 02 - Mehrsprachige Programme entwickeln
1. Anlegen der Sprachdateien
2. Sprachen festlegen
3. Texte einpflegen
4. Code-Integration
5. Testen
Alle Seiten
In dem folgenden Tutorial möchte ich Euch zeigen, wie Ihr mit Hilfe von XCode 3 eure Programme multilingual werden last, d.h. also das die Programme zur Laufzeit die aktivierte Sprache des iPhones erkennen und je nach dem dann eure Programmtexte in der Sprache anpassen.
Auch wenn Ihr nicht eure Programme mit mehrer Sprachen ausstatten möchtet, solltet Ihr dieses Tutorial durcharbeiten, da Ihr dann lernt wie Ihr Eure verwendeten Texte alle in einer Datei zusammengefasst halten könnt.

Last Euch nicht von der Länge des Tutorial abschrecken - ich habe dieses nur so detaliiert wie möglich gestalltet. Habt Ihr es ersteinmal durchgelesen - könnt Ihr sicherlich innerhalb von 5 Minuten selber Eure Programme multilingual gestallten.

Bevor wir anfangen, solltet Ihr mein "HelloWorld" - Tutorial durchgegangen sein, denn auf dem dabei enstandenen Projekt basiert dieses Tutorial.

Wir werden also unser HelloWord mit den Sprachen Englisch und Deutsch austatten. Realisiert wird das ganze, in dem wir uns in unserem Projekt für jede Sprache eine eigene Sprachdatei definieren, welche dann die Text beinhaltet.

Wei immer findet Ihr am Ende des Tutorials das gesamte Xcode-Projekt auch als zum zip-Datei zum downloaden.

Los gehts :



1. Anlegen der Sprachdateien

 Ausgehend von meinem "HelloWorld"-Tutorial, wählt Ihr im Projekt-Inspektor unterhalb von "HelloWorld" den Punkt "Resources" aus und macht einen Rechts-Klick darauf. Wählt nun "Add"->"New File..."




Im darauf erscheinenden neuen Fenster müsstet Ihr unterhalb von "MAC OS X" den Bereich "Other" wählen. In der erscheinenden Liste im rechten Teil des Fensters wählt Ihr dann "Strings File" aus und bestätigt mit "Next".  



Im nächsten Schritt müsst Ihr einen Dateinamen festlegen. Es ist wichtig, das Ihr "Localizable.strings" als Namen benutzt, da dann später das Programm zur Laufzeit standardmäßig in dieser Datei nach Strings sucht.

 
Klickt auf "Finish". Ihr seht nun im Projektbaum unterhalb von Resources die neu erstellte Datei "Localizable.strings"  und es öffnet sich die soeben neu erstellte Datei mit einem Kommentar. 


Diesen Kommentar bitte löschen, die Datei abspeichern. 


2. Sprachen festlegen

Jetzt müssen wir unsere neue Datei als "localizable" dem Xcode erkenntlich machen und die gewünschten Sprachen hinzufügen. Dazu wählen wir nun per Rechts-Klick unsere Localizable.strings Datei im Projekt-Inspektor aus und wählen "Get Info"




Es erscheint ein neues Fenster mit allerlei Informationen zu dieser Datei. Wählt hier bitte im oberen Teil "General" aus und klickt dann unten links auf "Make File Localizable"
 


Das Fenster müsste jetzt zurück auf "Targets" gewechselt sein - geht bitte wieder auf "General" und Ihr werdet fesstellen, das die Sprache "Englisch" bereits vorhanden ist.
Jetzt fügen wir noch Deutsch mit hinzu. Dazu einfach unten links auf "Add Localization" klicken und in der daraufhin erscheinenden Auswahlbox "German" wählen.

Schließt das Info Fenster und kehrt zum Projekt-Inspektor zurück.

Man sieht nun im Projekt-Baum nach dem aufklappen von "Localizable.strings" die beiden neu erstellten Einträge "English" und "German".
Im Endeffekt bedeutet das für die Applikation, das zwei neue Verzeichnisse im Programmordner erstellt wurden, einmal English.lproj und German.lproj. Beide beinhalten eine Datei namens "Localizable.strings".

Jederzeit könnt Ihr weiter Sprachdateien auf eben gezeigten Weg hinzufügen - Ihr müsst diese dann aber, wie im nächsten Kapitel gezeigt, auch zusätzlich mit Texten befüllen.



3. Texte einpflegen

In beiden Sprach-Dateien müssen wir nun unsere Texte, in diesem Beispiel unser "Hello World" einpflegen.

Öffnet dazu bitte im Projektbaum durch Doppelklick die englische Sprachdatei. Ihr seht ein leeres Fenster, in welches Ihr folgendes eingeben müsst:
"helloworld" = "Hello World"; 
 
Speichert und schließt die Datei und macht das gleiche Ihr für die deutsche Sprachdatei, aber mit folgenden Inhalt:
"helloworld" = "Hallo Welt";

Zur Erklärung: Solche Sprachdateien haben die Syntax "key" = "tatsächlicher Text"; - wobei der key als eine Art eindeutige Identifizierung zu verstehen ist. Diese verwenden wir später im Quelltext, um unsere Texte an die jeweilige Stelle einzufügen. Gefolgt von einem Gleichheitszeichen und in "Gänsefüßchen" eingeschlossen kommt der tatsächlich darzustellende Text. Bitte das Semikolon am Ende nicht vergessen.

Sollen später noch mehr Texte in eurem Programm hinzugefügt werden, braucht Ihr einfach nur für jeden Text eine neue Zeile hinzufügen, z.B.:

englisch:
"key1" = "one";
"key2" = "two";
"key3" = "three"; 

deutsch:
"key1" = "eins";
"key2" = "zwei";
"key3" = "drei"; 



4. Code-Integration

Das Schlüsselwort um jetzt die Texte dynamisch in der jeweiligen Sprache darzustellen, nennt sich NSLocalizedString(NSString* key, NSString* comment). 

Hinweis:
Es handelt sich dabei nicht, wie evenutell zu vermuten ist, um eine Funktion, sondern um ein 
Präprozessor-Define, welches wie eine Funktion benutzt wird. 
Dieses Präprozessor-Define macht nichts anderes als die Funktion localizedStringForKey aus der Klasse NSBundle mit Werten zu füttern.

Der erste Parameter key legt dabei den von uns festgelegten key aus der String-Datei fest, wohin gegen der zweite Parameter mit nil oder einem Kommentar versehen werden kann. Der Kommentar selber wird in der Anwendung nicht ersichtlich sein, sondern bietet dem Programmierer nur die Möglichkeit sich selber einen Hinweis auf den Text zu geben.

Ändern wir nun unser "Hello World" auf das neu erlernte ab. Öffnet dazu bitte die Datei HelloWorldAppDelegate.m - diese sollte wie folgt aussehen:

//
//  HelloWorldAppDelegate.m
//  HelloWorld
//
//  Created by ...
//  Copyright __MyCompanyName__ 2008. All rights reserved.
//

#import "HelloWorldAppDelegate.h"

@implementation HelloWorldAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {   
   
    // Override point for customization after app launch
   
    // die Navigationsleiste
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:
                               CGRectMake( 0.0f, 20.0f, window.frame.size.width, 48.0f)];
   
    // Aussehen der Navigationsleiste
    [navBar setBarStyle: 0];
   
    // der Titel
    UINavigationItem *title = [[UINavigationItem alloc] initWithTitle:@"Hello World"];
   
    // Titel wird der Navigationsleiste hinzugefügt
    [navBar pushNavigationItem:title animated:true];
   
    // die navigationsleiste wird dem window hinzugefügt
    [window addSubview:navBar];
   
    [window makeKeyAndVisible];
   
    // Speicher freigeben
    [navBar release];
}


- (void)dealloc {
    [window release];
    [super dealloc];
}


@end

 

Ändert nun bitte die Zeile, in der wir den Titel für die NavigationsBar festlegen, wie folgt ab

UINavigationItem *title = [[UINavigationItem allocinitWithTitle:NSLocalizedString(@"helloworld",@"Applikationsname")];

Wir geben also nun nicht mehr den Text direkt an, sondern bitten NSLocalizedString für uns zu ermitteln, welcher Text bei der aktuellen Spracheinstellung für den übergebenen key zutrifft und lassen das Ergebnis zurück geben.

Übriegens, die vergebenen key's sollten durchaus sinnvolle englisch-sprachige Wörter oder sogar Sätze sein. Eventuell existieren ja keine Sprach-Dateien mehr oder der key wird nicht gefunden o.ä., dann wird nämlich der key selber von NSLocalizedString zurückgegben. Für denn Fall das ein key in einer benötigten Sprachdatei nicht gefunden wird, aber in der englischen Sprach-Datei schon, dann wird dieser Wert zurückgegeben.



5. Testen

Ihr könnt jetzt schon einmal die Applikation starten und werdet sehen, das als Titel "Hello World" zu sehen ist.

Beendet das Programm durch drücken auf die "Home"-Taste auf dem iPhone und geht in die Einstellungen von diesem (Settings). Dort kommt Ihr über "Gerneral"->"International" in das Menü für die Spracheinstellungen. Wählt als Sprache (Language) "German" aus und bestätigt Eure Änderung mit "Done". Euer iPhone-Simulator ist nun deutschsprachig.

Vom Hauptmenü aus könnt ihr die HelloWorld-Anwendung neu starten und siehe da, jetzt steht dort "Hallo Welt".




Das wars und viel Spaß mit Eurem iPhone.

Das zu diesem Tutorial zugehörige Xcode-Projekt findet Ihr hier: "HelloWorld_multilingual.zip"



___
Kommentare (12)
Gibt es eigentlich eine default Sprache ...
1 THURSDAY, 13 MARCH 2008 15:58
???
... wenn Spanisch ... und ich habe keine Spanische Sprachdatei - wird dann automatisch englisch verwendet ... oder wie löst Apple das Gruss Gert
RE: Gibt es eigentlich eine default Sprache ...
2 THURSDAY, 13 MARCH 2008 16:04
???
absolut richtig, in dem Moment, wo die Datei "Localizable.strings" localizable gemacht wurde, hast Du schon die englische Sprachdatei erstellt. Diese sollte auf alle Fälle mitgeflegt werden.

Hat der iPhone Besitzer also spanisch aktiviert und du diese Sprache in deinem Programm nicht unterstützt - wählt das Betriebssystem autmatisch deine englische Sprachdatei aus. Wird auch diese nicht gefunden - werden die "key"-Namen von NSLocalizedString zurück gegeben.
THX
3 THURSDAY, 27 MARCH 2008 15:37
???
Super Tutorial
Danke
4 THURSDAY, 13 NOVEMBER 2008 10:36
???
Echt gut erklärt.
NSLocalizedString(@"helloworld",@"Applikationsname")]
5 THURSDAY, 04 DECEMBER 2008 12:30
???
Habe das nach deinem Tut mal gemacht klappt.

jetzt hab ich aber nen view Based Projekt erstellt und das dort versucht umzusetzen, aber ohne Erfolg ich bekomme nur den wert in der Codezeile gezeigt nicht den wert aus dem string.

Habe alles gemacht Localizabel.string localizabel gemacht und dann NSLocalizedString(@"helloworld",@"Applikationsname")]

mein wert wird aber immer nur helloworld angezeigt, wie gesagt habe es schon oft hinbekommen aber im viewbased Projekt irgendwie nicht .
RE:NSLocalizedString(@"helloworld",@"Applikationsname")]
6 THURSDAY, 04 DECEMBER 2008 12:37
???
Wichtig ist die richtige Schreibweise in den string-Dateien. Also Gänsefüßchen und Semikolon nicht vergessen. Für dein Beispiel also:

"helloworld" = "irgend ein Text, z.B. der Applikationsname";
UTF-18-Codierung
7 MONDAY, 11 Mai 2009 08:52
???
Hallo, vielen Dank für das Tutorial.
Ein Detail wurde leider vergessen: zumindest ich musste noch für die einzelnen Sprachen in den Dateien unter "get info" die Codierung einstellen, da sonst Änderungen an den Textfiles nicht übernommen wurden. Die Codierung Eurer Wahl sollte dabei UTF-18 sein.

maw
UILabel
8 WEDNESDAY, 08 JULY 2009 13:57
???
Hallo, danke für das Tutorial.

Wie muss man das schreiben bei einem UILabel?

Ohne Sprache schreibe ich das so;
infoText.text = [NSString stringWithFormat:@"einen Text"];

Mit Sprache habe ich das versucht;
infoText.text = [NSString stringWithFormat:NSLocalizedString(@"key1",@"Applikationsname")];
infoText.text = NSLocalizedString(@"key1",@"Applikationsname");
infoText.text = [NSLocalizedString stringWithFormat:@"undotext"];
Aber es funktionniert nicht...

Danke für deine Hilfe
Cooles Tut
9 WEDNESDAY, 30 DECEMBER 2009 00:42
???
Hey, danke für das HAMMA Tutorial!
Das erste Tutorial, das nicht zu schwer, noch zu leicht für mich ist!

Doch eine Frage bleibt noch.
- Muss die Datei eigendlich Localizable heißen? und
- Kann man auch mehrere Localized Files haben? Schaut das dann wo der Key ist? Und wenn er doppelt vorkommt?
Re:
10 TUESDAY, 12 OCTOBER 2010 18:12
???
Every one acknowledges that humen's life is not very cheap, nevertheless different people need cash for various issues and not every one gets enough cash. Thus to get fast home loans or just collateral loan should be good way out.
Probleme auf dem Device, im Simulator funktioniert es super
11 SUNDAY, 17 OCTOBER 2010 13:24
???
Hallo,

super Tutorial, funktioniert bei mir alles super im Simulator, wenn ich das Projekt jedoch auf meinem iPod Touch schiebe und dort ausprobiere, dann stehen für die Texte nur die Tagnamen da. Weiss jemand woran das liegen kann?

danke
Problem behoben
12 SUNDAY, 17 OCTOBER 2010 14:57
???
habe die App auf dem Device mit dem XCode Organizer gelöscht und durch den Buildprozess noch einmal draufgeschoben und dann hat es auf einmal funktioniert. Blöder XCode Bug. Naja wenigstens geht es jetzt.

Ihren Kommentar hinzufügen

Ihr Name:
Ihre Webseite:
Betreff:
Kommentar:
  Bild, welches den Sicherheitscode enthält
Sicherheitscode:
LAST_UPDATED2