Neue Aufschlüsselung nach Sprachen und Regionen

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 den es_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:

Tabelle 1 Ressourcenauflösung ohne genaue Länderübereinstimmung.

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:

Tabelle 2 Eine verbesserte Lösungsstrategie für den Fall, dass keine genaue Länderübereinstimmung vorhanden ist.

Nutzereinstellungen App-Ressourcen Ressourcenauflösung
  1. fr_CH
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.

Tabelle 3 Ressourcenauflösung, wenn die App nur mit der zweitbevorzugten Spracheinstellung des Nutzers übereinstimmt

Nutzereinstellungen App-Ressourcen Ressourcenauflösung
  1. fr_CH
  2. it_CH
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")
    }
}
Aufgrund der Art und Weise, wie das Build-System Ressourcen aus der Anwendung und deren Abhängigkeiten zusammenführt, müssen Sie unterstützte Sprachen auf diese Weise angeben, damit die Spracheinstellungen der Nutzer korrekt empfangen werden.

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)