Android Localization (Android-Lokalisierung)
In diesem Dokument werden die Lokalisierungsfeatures des Android SDK und der Zugriff auf diese mit Xamarin erläutert.
Android-Plattformfeatures
In diesem Abschnitt werden die wichtigsten Lokalisierungsfeatures von Android beschrieben. Springen Sie zum nächsten Abschnitt, um spezifischen Code und Beispiele anzuzeigen.
Gebietsschema
Benutzer wählen ihre Sprache in " Einstellungssprache > und Eingabe" aus. Diese Auswahl steuert sowohl die verwendete Sprache als auch die verwendeten regionalen Einstellungen (z. B. für Die Datums- und Zahlenformatierung).
Das aktuelle Gebietsschema kann über die aktuellen Kontexte Resources
abgefragt werden:
var lang = Resources.Configuration.Locale; // eg. "es_ES"
Dieser Wert ist ein Gebietsschemabezeichner, der sowohl einen Sprachcode als auch einen Gebietsschemacode enthält, getrennt durch einen Unterstrich. Hier ist eine Liste der Java-Gebietsschemas und android-unterstützten Gebietsschemas über StackOverflow.
Häufige Beispiele sind:
en_US
für Englisch (USA)es_ES
für Spanisch (Spanien)ja_JP
für Japanisch (Japan)zh_CN
für Chinesisch (China)zh_TW
für Chinesisch (Taiwan)pt_PT
für Portugiesisch (Portugal)pt_BR
für Portugiesisch (Brasilien)
LOCALE_CHANGED
Android generiert android.intent.action.LOCALE_CHANGED
, wenn der Benutzer seine Sprachauswahl ändert.
Aktivitäten können dies durch Festlegen des android:configChanges
Attributs für die Aktivität wie folgt behandeln:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Locale | ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
Internationalisierungsgrundlagen in Android
Die Lokalisierungsstrategie von Android umfasst die folgenden wichtigen Teile:
Ressourcenordner, die lokalisierte Zeichenfolgen, Bilder und andere Ressourcen enthalten sollen.
GetText
-Methode, die zum Abrufen lokalisierter Zeichenfolgen im Code verwendet wird@string/id
in AXML-Dateien, um lokalisierte Zeichenfolgen automatisch in Layouts zu platzieren.
Ressourcenordner
Android-Anwendungen verwalten die meisten Inhalte in Ressourcenordnern, z. B.:
- layout - enthält AXML-Layoutdateien.
- drawable - enthält Bilder und andere zeichnungsfähige Ressourcen.
- - enthält Zeichenfolgen.
- raw - enthält Datendateien.
Die meisten Entwickler sind bereits mit der Verwendung von DPI-Suffixen im zeichnungsfähigen Verzeichnis vertraut, um mehrere Versionen eines Bilds bereitzustellen, sodass Android die richtige Version für jedes Gerät auswählen kann. Derselbe Mechanismus wird verwendet, um mehrere Sprachübersetzungen durch Suffixing von Ressourcenverzeichnissen mit Sprach- und Kulturbezeichnern bereitzustellen.
Hinweis
Wenn Sie eine Sprache auf oberster Ebene wie es
nur zwei Zeichen angeben, sind jedoch beim Angeben eines vollständigen Gebietsschemas ein Gedankenstrich- und Kleinbuchstabe erforderlich, um die beiden Teile zu trennen, z. B. pt-rBR oder zh-rCN. Vergleichen Sie dies mit dem wert, der im Code zurückgegeben wird, der einen Unterstrich aufweist (z. B. pt_BR
). Beide unterscheiden sich von der .NET-Klasse CultureInfo
, die nur einen Gedankenstrich aufweist (z. B. pt-BR
). Beachten Sie diese Unterschiede beim Arbeiten auf Xamarin-Plattformen.
Strings.xml Dateiformat
Ein lokalisiertes Werteverzeichnis (z. B. values-es oder values-pt-rBR) sollte eine Datei namens Strings.xml enthalten, die den übersetzten Text für dieses Gebietsschema enthält.
Jede übersetzbare Zeichenfolge ist ein XML-Element mit der als Attribut angegebenen name
Ressourcen-ID und der übersetzten Zeichenfolge als Wert:
<string name="app_name">TaskyL10n</string>
Sie müssen gemäß normalen XML-Regeln escapen, und dies name
muss eine gültige Android-Ressourcen-ID (keine Leerzeichen oder Gedankenstriche) sein. Hier ist ein Beispiel für die Standardzeichenfolgendatei (Englisch) für das Beispiel:
values/Strings.xml
<resources>
<string name="app_name">TaskyL10n</string>
<string name="taskadd">Add Task</string>
<string name="taskname">Name</string>
<string name="tasknotes">Notes</string>
<string name="taskdone">Done</string>
<string name="taskcancel">Cancel</string>
</resources>
Das spanische Verzeichnis "values-es " enthält eine Datei mit demselben Namen (Strings.xml), die die Übersetzungen enthält:
values-es/Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TaskyLeon</string>
<string name="taskadd">agregar tarea</string>
<string name="taskname">Nombre</string>
<string name="tasknotes">Notas</string>
<string name="taskdone">Completo</string>
<string name="taskcancel">Cancelar</string>
</resources>
Bei der Einrichtung der Zeichenfolgendateien können auf die übersetzten Werte sowohl in Layouts als auch in Code verwiesen werden.
AXML-Layoutdateien
Verwenden Sie die @string/id
Syntax, um lokalisierte Zeichenfolgen in Layoutdateien zu referenzieren. Dieser XML-Codeausschnitt aus dem Beispiel zeigt text
Eigenschaften, die mit lokalisierten Ressourcen-IDs festgelegt werden (einige andere Attribute wurden weggelassen):
<TextView
android:id="@+id/NameLabel"
android:text="@string/taskname"
... />
<CheckBox
android:id="@+id/chkDone"
android:text="@string/taskdone"
... />
GetText-Methode
Verwenden Sie die Methode, und übergeben Sie die GetText
Ressourcen-ID, um übersetzte Zeichenfolgen im Code abzurufen:
var cancelText = Resources.GetText (Resource.String.taskcancel);
Mengenzeichenfolgen
Mit Android-Zeichenfolgenressourcen können Sie auch Mengenzeichenfolgen erstellen, mit denen Übersetzer unterschiedliche Übersetzungen für unterschiedliche Mengen bereitstellen können, z. B.:
- "Es ist 1 Vorgang übrig."
- "Es gibt noch 2 Aufgaben."
(anstelle eines generischen "Es gibt n Vorgänge links").
Im Strings.xml
<plurals name="numberOfTasks">
<!--
As a developer, you should always supply "one" and "other"
strings. Your translators will know which strings are actually
needed for their language.
-->
<item quantity="one">There is %d task left.</item>
<item quantity="other">There are %d tasks still to do.</item>
</plurals>
Um die vollständige Zeichenfolge zu rendern, verwenden Sie die GetQuantityString
Methode, und übergeben Sie die Ressourcen-ID und den anzuzeigenden Wert (der zweimal übergeben wird). Der zweite Parameter wird von Android verwendet, um zu bestimmen , welche quantity
Zeichenfolge verwendet werden soll, der dritte Parameter ist der Wert, der tatsächlich in die Zeichenfolge ersetzt wird (beide sind erforderlich).
var translated = Resources.GetQuantityString (
Resource.Plurals.numberOfTasks, taskcount, taskcount);`
Gültige quantity
Schalter sind:
- null
- Einen
- Zwei
- few
- vielen
- Andere
Sie werden in den Android-Dokumenten ausführlicher beschrieben. Wenn eine bestimmte Sprache keine "spezielle" Behandlung erfordert, werden diese quantity
Zeichenfolgen ignoriert (z. B. wird englisch nur verwendet one
und other
; das Angeben einer zero
Zeichenfolge hat keine Auswirkung, sie wird nicht verwendet).
Bilder
Lokalisierte Bilder folgen den gleichen Regeln wie Zeichenfolgendateien: Alle Bilder, auf die in der Anwendung verwiesen wird, sollten in gezeichneten Verzeichnissen platziert werden, sodass ein Fallback vorhanden ist.
Gebietsschemaspezifische Bilder sollten dann in qualifizierten zeichnungsfähigen Ordnern wie drawable-es oder drawable-ja platziert werden (DPI-Bezeichner können ebenfalls hinzugefügt werden).
In diesem Screenshot werden vier Bilder im zeichnungsfähigen Verzeichnis gespeichert, aber nur eine, flag.png, hat Kopien in anderen Verzeichnissen lokalisiert.
Andere Ressourcentypen
Sie können auch andere Arten von alternativen, sprachspezifischen Ressourcen bereitstellen, einschließlich Layouts, Animationen und Rohdateien. Dies bedeutet, dass Sie ein bestimmtes Bildschirmlayout für eine oder mehrere Ihrer Zielsprachen bereitstellen können, z. B. können Sie ein Layout speziell für Deutsch erstellen, das sehr lange Textbeschriftungen ermöglicht.
Android 4.2 hat Unterstützung für Sprachen von rechts nach links (RTL) eingeführt, wenn Sie die Anwendungseinstellung android:supportsRtl="true"
festlegen. Der Ressourcenqualifizierer "ldrtl"
kann in einen Verzeichnisnamen aufgenommen werden, um benutzerdefinierte Layouts zu enthalten, die für die RTL-Anzeige konzipiert sind.
Weitere Informationen zum Benennen und Ausweichen von Ressourcenverzeichnissen finden Sie in den Android-Dokumenten für die Bereitstellung alternativer Ressourcen.
App-Name
Der Anwendungsname ist einfach zu lokalisieren, indem ein @string/id
In für die MainLauncher
Aktivität verwendet wird:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Locale)]
Sprachen von rechts nach links (RTL)
Android 4.2 und neuer bietet vollständige Unterstützung für RTL-Layouts, die im Native RTL Support-Blog ausführlich beschrieben werden.
Bei Verwendung von Android 4.2 (API-Ebene 17) und neuer können Ausrichtungswerte mit start
und end
anstelle und right
left
(z. Bandroid:paddingStart
. ) angegeben werden. Es gibt auch neue APIs wie LayoutDirection
, TextDirection
und TextAlignment
um Bildschirme zu erstellen, die sich für RTL-Leser anpassen.
Der folgende Screenshot zeigt das lokalisierte Tasky-Beispiel in Arabisch:
Der nächste Screenshot zeigt das lokalisierte Tasky-Beispiel in Hebräisch:
RTL-Text wird mit Strings.xml Dateien auf die gleiche Weise wie LTR-Text lokalisiert.
Testen
Testen Sie unbedingt das Standardgebietsschema. Ihre Anwendung stürzt ab, wenn die Standardressourcen aus irgendeinem Grund nicht geladen werden können (d. h. sie fehlen).
Emulatortests
Anweisungen zum Festlegen eines Emulators auf ein bestimmtes Gebietsschema mithilfe der ADB-Shell finden Sie im Abschnitt "Google-Tests auf einem Android-Emulator ".
adb shell setprop persist.sys.locale fr-CA;stop;sleep 5;start
Gerätetests
Um auf einem Gerät zu testen, ändern Sie die Sprache in der Einstellungs-App .
Tipp
Notieren Sie sich die Symbole und die Position der Menüelemente, damit Sie die Sprache auf die ursprüngliche Einstellung zurücksetzen können.
Zusammenfassung
In diesem Artikel werden die Grundlagen der Lokalisierung von Android-Anwendungen mithilfe der integrierten Ressourcenbehandlung behandelt. In diesem plattformübergreifenden Leitfaden erfahren Sie mehr über i18n- und L10n-Apps für iOS, Android und plattformübergreifende Apps (einschließlich Xamarin.Forms).