Neue Aufschlüsselung nach Sprachen und Regionen

Ab Android 7.0 (API-Level 24) Android bietet eine erweiterte Unterstützung für mehrsprachige Nutzer, in den Einstellungen mehrere Sprachen auswählen. Android-Geräte bietet diese Möglichkeit, indem die Anzahl der unterstützten Sprachen erheblich erhöht wird. und die Art und Weise ändert, wie das System Ressourcen auflöst.

In diesem Dokument wird zunächst die Strategie Versionen von Android unter 7.0 (API-Level 24) Als Nächstes wird beschrieben, der verbesserten Lösungsstrategie für Ressourcen in Android 7.0. Schließlich wird erläutert, wie Sie der erweiterten Anzahl von Sprachen, um mehrsprachige Nutzer zu unterstützen.

Herausforderungen beim Klären von Sprachressourcen

Vor Android 7.0 war Android nicht immer erfolgreich. App- und Systemsprachen übereinstimmen.

Nehmen wir zum Beispiel an, dass folgende Situation vorliegt:

  • Die Standardsprache deiner App ist en_US (Englisch (USA)). Außerdem wurde Lokalisierte spanische Strings in es_ES Ressourcendateien.
  • Ein Gerät ist auf „es_MX“ eingestellt

Wenn Ihr Java-Code auf Zeichenfolgen verweist, lädt das System aus der Standardressourcendatei (en_US), auch wenn die App Spanische Ressourcen lokalisiert unter es_ES. Das liegt daran, dass das System findet keine genaue Übereinstimmung, sucht sie weiter nach Ressourcen, indem sie Wenn keine Übereinstimmung gefunden wird, fällt das System auf den Standardwert en_US zurücksetzen.

Das System verwendet außerdem standardmäßig en_US, wenn der Nutzer eine Sprache auswählt, die die App überhaupt nicht unterstützt, zum Beispiel Französisch. Beispiel:

Tabelle 1 Ressourcenauflösung ohne exakte Sprachübereinstimmung.

Nutzereinstellungen App-Ressourcen Ressourcenauflösung
fr_CH Standard (de)
de_DE
es_ES
fr_FR
sie_IT
Versuchen Sie es mit fr_CH => Fehlgeschlagen
Versuchen Sie es mit fr => Fehlgeschlagen
Standardeinstellung verwenden (en)

In diesem Beispiel zeigt das System englische Zeichenfolgen ohne zu wissen, ob die Nutzenden Englisch verstehen. Dieses Verhalten kommt häufig vor, heute.

Verbesserungen an der Strategie zur Ressourcenbeseitigung

Android 7.0 (API-Level 24) bietet eine stabilere Ressourcenauflösung und findet automatisch bessere Fallbacks. Um die Auflösung zu beschleunigen und die sollten Sie Ressourcen im gebräuchlichsten übergeordneten Dialekt speichern. Wenn Sie z. B. spanische Ressourcen im Verzeichnis values-es-rUS verschieben Sie sie in das Verzeichnis values-b+es+419, das lateinamerikanisches Spanisch enthält. Wenn Sie Ressourcenzeichenfolgen in einer Verzeichnis namens values-en-rGB, umbenennen das Verzeichnis nach values-b+en+001 (Internationale Englisch), da die am häufigsten verwendete Übergeordnetes Element für en-GB-Strings ist en-001. Die folgenden Beispiele erklären, warum diese Praktiken die Leistung verbessern und Zuverlässigkeit der Ressourcenauflösung.

Beispiele für die Ressourcenauflösung

Bei Android-Versionen ab 7.0 ist der unter Tabelle 1 wird anders aufgelöst:

Tabelle 2: Eine verbesserte Lösungsstrategie, wenn es keine genaue Übereinstimmung mit dem Gebietsschema.

Nutzereinstellungen App-Ressourcen Ressourcenauflösung
  1. fr_CH
Standard (de)
de_DE
es_ES
fr_FR
sie_IT
Versuchen Sie es mit fr_CH => Fehlgeschlagen
Versuchen Sie es mit fr => Fehlgeschlagen
Versuche es mit den untergeordneten Elementen von fr => fr_FR
fr_FR verwenden

Jetzt erhält der Nutzer französische statt Englisch. Dieses Beispiel zeigt auch Warum sollten Sie französische Strings in fr statt in fr_FR speichern? für Android 7.0 oder höher. Hier ist die Vorgehensweise, um dem übergeordneten Dialekt zu entsprechen, schneller und vorhersehbarer zu machen.

Zusätzlich zu dieser verbesserten Lösungslogik bietet Android jetzt noch mehr Nutzersprachen zur Auswahl. Versuchen wir das obige Beispiel noch einmal mit Italienisch. als zusätzliche Nutzersprache angegeben, jedoch ohne App-Unterstützung für Französisch.

Tabelle 3 Ressourcenauflösung, wenn die App nur mit dem Spracheinstellung des Nutzers als zweitliebste festlegen.

Nutzereinstellungen App-Ressourcen Ressourcenauflösung
  1. fr_CH
  2. it_CH
Standard (de)
de_DE
es_ES
sie_IT
Versuchen Sie es mit fr_CH => Fehlgeschlagen
Versuchen Sie es mit fr => Fehlgeschlagen
Versuche es mit den untergeordneten Elementen von fr => Fehlgeschlagen
Ausprobieren_CH => Fehlgeschlagen
Ausprobieren => Fehlgeschlagen
Probieren Sie die untergeordneten Elemente aus => sie_IT
Verwenden_IT

Der Nutzer versteht immer noch eine Sprache, die er versteht, auch wenn die App Französisch unterstützt.

Apps für die Unterstützung weiterer Sprachen konzipieren

Android bietet Tools, die es einfacher machen, App-Inhalte zu lokalisieren und die Interaktion der Nutzer mit ihren bevorzugten Sprachen. Wir empfehlen die folgenden Methoden, um Ihre App zu konfigurieren, damit sie verschiedene Sprachen und Formatierungskonventionen auf skalierbare Weise berücksichtigen.

Gib die Sprachen an, die deine App unterstützt

Damit Sprachen korrekt aufgelöst werden, gib die Sprachen an, die deine App unterstützt, indem du das resConfigs in der Datei build.gradle auf Modulebene.

Das folgende Codebeispiel zeigt, wie mit resConfigs unterstützte Sprachen angegeben werden. In diesem Beispiel unterstützt die App sowohl Englisch als auch Spanisch.

Cool

android {
    defaultConfig {
        ...
        resConfigs "en", "es"
    }
}

Kotlin

android {
    defaultConfig {
        ...
        resConfigs("en", "es")
    }
}
Aufgrund der Art und Weise, wie das Build-System Ressourcen aus Ihrer App und ihren Abhängigkeiten zusammenführt, müssen Sie unterstützte Sprachen so angeben, dass die Spracheinstellungen des Nutzers korrekt empfangen werden.

LocaleList-API

Ab Android 7.0 (API-Level 24) stellt Android die LocaleList.getDefault()-API können Apps die vom Nutzer angegebenen Sprachen direkt abfragen. Diese API können Sie komplexere und eine besser optimierte Darstellung von Inhalten. Beispiel: Suche kann Ergebnisse je nach Nutzereinstellungen in mehreren Sprachen anzeigen. Browser-Apps wird dem Nutzer nicht angeboten, Seiten in einer Sprache zu übersetzen, die er bereits beherrscht. und Tastatur-Apps können alle geeigneten Layouts automatisch aktivieren.

Formatierer

Bis Android 6.0 (API-Level 23) unterstützte Android nur eine oder zwei Sprachen für viele gängige Sprachen (en, es, ar, fr, ru). Da es von jeder Sprache nur wenige Varianten gab, Apps könnten einige Zahlen und Daten als hartcodierte Zeichenfolgen speichern. in Ressourcendateien. Da die zahlreichen unterstützten Android-Apps können sich erhebliche Unterschiede bei den Formaten für Datumsangaben, Uhrzeiten, Währungen und ähnliches Informationen innerhalb einer einzigen Sprache. Durch die Hartcodierung Ihrer Formate die Endnutzer verwirren. Wenn Sie also für Android 7.0 oder höher entwickeln, verwenden Sie Formatierer anstelle von hartcodierten Zahlen und Datumszeichenfolgen.

Android 7.0 und höher unterstützen beispielsweise 27 arabische Sprachen. Diese Sprachen können sich die meisten Ressourcen teilen, einige bevorzugen ASCII-Ziffern, während andere native Ziffern bevorzugen. Beispiel: wenn Sie einen Satz mit einer Ziffernvariablen wie z. B. „Wählen Sie eine vierstellige PIN aus“, verwenden Sie Formatierer wie unten gezeigt:

 format(locale, "Choose a %d-digit PIN", 4)