Ab Android 7.0 (API-Ebene 24) bietet Android eine erweiterte Unterstützung für mehrsprachige Nutzer, da diese in den Einstellungen mehrere Sprachen auswählen können. Android bietet diese Möglichkeit, indem die Anzahl der unterstützten Sprachen erheblich erweitert wird und die Art und Weise geändert wird, wie das System Ressourcen auflöst.
In diesem Dokument wird zunächst die Strategie zur Ressourcenauflösung in Android-Versionen unter 7.0 (API-Level 24) erläutert. Als Nächstes wird die verbesserte Strategie zur Ressourcenauflösung in Android 7.0 beschrieben. Zu guter Letzt erfahren Sie, wie Sie die größere Anzahl an Sprachen optimal nutzen können, um mehr mehrsprachige Nutzer zu unterstützen.
Herausforderungen bei der Behebung von Sprachressourcen
Vor Android 7.0 konnte die Sprache der App und des Systems nicht immer von Android abgeglichen werden.
Nehmen wir beispielsweise an, Sie haben die folgende Situation:
- Die Standardsprache Ihrer App ist
en_US
(Englisch (USA)). Außerdem sind in denes_ES
-Ressourcendateien spanische Strings lokalisiert. - Ein Gerät ist auf „
es_MX
“ festgelegt
Wenn Ihr Java-Code auf Strings verweist, lädt das System Strings aus der Standardressourcendatei (en_US
), auch wenn in der App spanische Ressourcen unter es_ES
lokalisiert sind. Das liegt daran, dass das System, wenn es keine genaue Übereinstimmung findet, weiterhin nach Ressourcen sucht, indem es den Ländercode aus der Sprache entfernt. Wenn keine Übereinstimmung gefunden wird, greift das System auf den Standardwert en_US
zurück.
Das System würde auch standardmäßig auf en_US
gesetzt werden, wenn der Nutzer eine Sprache auswählt, die die App überhaupt nicht unterstützt, z. B. Französisch. Beispiele:
Nutzereinstellungen | App-Ressourcen | Ressourcenauflösung |
---|---|---|
fr_CH |
Standard (en) de_DE es_ES fr_FR it_IT |
Versuchen Sie es mit fr_CH => Nicht bestanden Versuchen Sie es mit fr => Nicht bestanden Standardwert verwenden (en) |
In diesem Beispiel zeigt das System englische Strings an, ohne zu wissen, ob der Nutzer Englisch versteht. Dieses Verhalten ist heute ziemlich üblich.
Verbesserungen an der Strategie zur Lösung von Ressourcen
Android 7.0 (API-Level 24) bietet eine robustere Ressourcenauflösung und findet automatisch bessere Fallbacks.
Um die Auflösung zu beschleunigen und die Verwaltbarkeit zu verbessern, sollten Sie Ressourcen jedoch im gebräuchlichsten übergeordneten Dialekt speichern.
Wenn Sie beispielsweise spanische Ressourcen zuvor im Verzeichnis values-es-rUS
gespeichert haben, verschieben Sie sie in das Verzeichnis values-b+es+419
, das lateinamerikanisches Spanisch enthält.
Wenn Sie Ressourcenstrings in einem Verzeichnis mit dem Namen values-en-rGB
haben, benennen Sie das Verzeichnis entsprechend in values-b+en+001
(internationales Englisch) um, da das häufigste übergeordnete Element für en-GB
-Strings en-001
ist.
Die folgenden Beispiele erklären, warum diese Praktiken die Leistung und Zuverlässigkeit der Ressourcenauflösung verbessern.
Beispiele für die Ressourcenauflösung
Bei Android-Versionen ab 7.0 wird der in Tabelle 1 beschriebene Fall anders aufgelöst:
Nutzereinstellungen | App-Ressourcen | Ressourcenauflösung |
---|---|---|
|
Standard (en) de_DE es_ES fr_FR it_IT |
Versuchen Sie es mit fr_CH => Fehlgeschlagen Versuchen Sie es mit fr => Fehlgeschlagen Versuchen Sie es mit fr_CH => fr_FR Verwenden Sie fr_FR |
Jetzt erhält der Nutzer französische Ressourcen anstelle von Englisch. Das Beispiel zeigt auch, warum du französische Strings in fr
und nicht in fr_FR
für Android 7.0 oder höher speichern solltest. Hier besteht die Vorgehensweise darin, dem nächstgelegenen übergeordneten Dialekt zu verwenden, um die Auflösung schneller und vorhersehbarer zu machen.
Zusätzlich zu dieser verbesserten Auflösungslogik bietet Android jetzt eine größere Auswahl an Nutzersprachen. Versuchen wir das obige Beispiel noch einmal mit Italienisch als zusätzliche Nutzersprache, aber ohne App-Unterstützung für Französisch.
Nutzereinstellungen | App-Ressourcen | Ressourcenauflösung |
---|---|---|
|
Standard (en) de_DE es_ES it_IT |
Versuchen Sie es mit fr_CH => Nicht bestanden Versuchen Sie es mit fr => Nicht bestanden Versuchen Sie es mit fr_CH => Nicht bestanden Ausprobieren_CH => Nicht bestanden Ausprobieren => Nicht bestanden Kinder davon ausprobieren => it_IT Verwenden_IT |
Dem Nutzer wird eine Sprache angezeigt, die er versteht, auch wenn die App kein Französisch unterstützt.
Entwicklung deiner App zur Unterstützung zusätzlicher Sprachen
Android bietet Tools, mit denen du App-Inhalte leichter lokalisieren und Nutzer in ihrer bevorzugten Sprache ansprechen kannst. Wir empfehlen, die Anwendung so zu konfigurieren, dass sie verschiedene Sprachen und Formatierungskonventionen auf skalierbare Weise unterstützt.
Von der App unterstützte Sprachen angeben
Damit Sprachen richtig aufgelöst werden, musst du die Sprachen, die deine App unterstützt, über die Eigenschaft resConfigs
in der Datei build.gradle
auf Modulebene angeben.
Das folgende Codebeispiel zeigt, wie mit resConfigs
unterstützte Sprachen angegeben werden.
In diesem Beispiel unterstützt die App sowohl Englisch als auch Spanisch.
Groovig
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
LocaleList-API
Ab Android 7.0 (API-Level 24) stellt Android die LocaleList.getDefault()
API zur Verfügung, mit der Apps die Liste der vom Nutzer angegebenen Sprachen direkt abfragen können. Mit dieser API können Sie ein ausgefeilteres App-Verhalten und eine besser optimierte Darstellung von Inhalten erstellen. Beispielsweise können in der Google Suche Ergebnisse je nach Nutzereinstellungen in mehreren Sprachen angezeigt werden. Browser-Apps können verhindern, dass Seiten in eine Sprache übersetzt werden, die der Nutzer bereits kennt. Tastatur-Apps können alle geeigneten Layouts automatisch aktivieren.
Formatierer
Bis Android 6.0 (API-Level 23) unterstützte Android nur ein oder zwei Sprachen für viele gängige Sprachen (en, es, ar, fr, ru). Da es von jeder Sprache nur wenige Varianten gab, konnten Apps einige Zahlen und Datumsangaben als hartcodierte Strings in Ressourcendateien speichern. Mit den zahlreichen unterstützten Sprachen von Android können jedoch auch innerhalb einer Sprache erhebliche Unterschiede in den Formaten für Datumsangaben, Uhrzeiten, Währungen und ähnliche Informationen auftreten. Wenn du deine Formate fest codiert, kann das für Endnutzer verwirrend sein. Achten Sie deshalb bei der Entwicklung für Android 7.0 oder höher darauf, Formatierer anstelle von hartcodierten Zahlen und Datumsstrings zu verwenden.
Android 7.0 und höher unterstützt beispielsweise 27 Sprachen für Arabisch. Diese Sprachen können die meisten Ressourcen gemeinsam nutzen, aber einige bevorzugen ASCII-Ziffern, während andere native Ziffern bevorzugen. Wenn Sie beispielsweise einen Satz mit einer Ziffernvariablen wie „4-stellige PIN auswählen“ erstellen möchten, sollten Sie die folgenden Formatierer verwenden:
format(locale, "Choose a %d-digit PIN", 4)