Android Training: Verschiedene Sprachen unterstützen

Aus Android Wiki
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.
Diese Seite ist eine übersetzte Version der Seite Android Training/Supporting Different Languages und die Übersetzung ist zu 100 % abgeschlossen sowie aktuell.
Sprachen:

Es ist immer eine gute Praxis, Zeichenketten der Benutzeroberfläche vom eigentlichen App-Code zu trennen und in einer externen Datei zu belassen. Android macht die Umsetzung einfach, durch ein ressources-Ordner in jedem Android Projekt.

Wenn du ein Projekt mit den Android SDK Tools erstellt hast (lese Erstellen eines Android Projektes), haben die Tools ein res/ Ordner im Stammverzeichnis des Projektes erstellt. Innerhalb dieses res/ Ordner gibt es verschiedene Unterordner für die verschiedenen Ressourcen-Typen. Außerdem liegen dort einige Standard-Dateien, wie zum Beispiel res/values/strings.xml, welche deine Zeichenketten beinhalten.

Locale-Verzeichnis und Zeichenketten-Dateien erstellen

Um mehr Sprachen zu unterstützen, musst du zusätzliche values Ordner unter res/ erstellen, welche einen Bindestrich gefolgt vom ISO Sprach-Code am Ende des Ordner-Namens haben. Als Beispiel: values-es/ ist der Ordner, welcher einfache Ressourcen für die Lokalisierung für den Sprachcode "es" beinhaltet. Android lädt die korrekten Ressourcen während der Laufzeit entsprechend der Sprach-Einstellungen des Gerätes. Für mehr Informationen, siehe Providing Alternative Resources.

Sobald du entschieden hast, welche Sprachen du unterstützen möchtest, kannst du die Ressourcen-Unterordner und die Zeichenketten-Ressourcen-Dateien erstellen. Als Beispiel:

MyProject/
    res/
        values/
            strings.xml
        values-es/
            strings.xml
        values-fr/
            strings.xml

Füge die Zeichenketten-Werte für jede Sprach-Version in die entsprechende Datei ein.

Während der Laufzeit nutzt Android die entsprechenden Zeichenketten-Ressourcen, basierend auf der Spracheinstellung des vom Nutzer verwendeten Gerätes.

Folgend sind beispielsweise verschiedene Zeichenketten-Ressourcen-Dateien für verschiedene Sprachen.

Englisch (Standard-Sprache), /values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>

Spanisch, /values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi Aplicación</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>

Französisch, /values-fr/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mon Application</string>
    <string name="hello_world">Bonjour le monde !</string>
</resources>

Note: Du kannst den Sprach-Qualifier (oder jeden anderen Konfigurations-Qualifier) für jeden Ressourcen-Typ verwenden, so als wenn du verschiedene, lokalisierte Versionen eines Bitmap-Drawable bereitstellen möchtest. Für mehr Informationen, siehe Lokalisierung.

Zeichenketten-Ressourcen verwenden

Du kannst Zeichenketten-Ressourcen in deinem Code oder anderen XML-Dateien anhand des Ressourcen-Namens, definiert mit dem name Attribut im <string> Element, referenzieren.

In deinem Quellcode kannst du eine Zeichenketten-Ressource mit der Syntax R.string.<string_name> referenzieren. Es gibt eine Vielzahl an Methoden, die eine Zeichenketten-Ressource auf diesen Weg akzeptieren.

Beispielsweise:

// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

In anderen XML-Dateien kannst du eine Zeichenketten-Ressource immer dann mit dieser Syntax @string/<string_name> referenzieren, wenn das XML-Attribut eine Zeichenkette akzeptiert.

Beispielsweise:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />