Unterstützung für Unicode und Internationalisierung

Android nutzt die ICU-Bibliothek und das CLDR-Projekt, um Unicode und andere Internationalisierungsfunktionen zu unterstützen. Die Informationen auf dieser Seite zum Unicode- und Internationalisierungs-Support sind in zwei Abschnitte unterteilt: Android 6.0 (API-Level 23) und niedriger sowie Android 7.0 (API-Level 24) und höher.

Unterstützung für Unicode und Internationalisierung bis Android 6.0 (API-Level 23)

Die Android-Plattform verwendet ICU und CLDR, um verschiedene Klassen für die Verarbeitung von lateinischen und nicht lateinischen Orthografien zu implementieren. Dabei werden Klassen wie Locale, Character und viele Unterklassen von java.text bereitgestellt. Für eine App, die Internationalisierungsfunktionen benötigt, die über die bereitgestellten Klassen hinausgehen, und auf Versionen der Plattform bis Android 6.0 (API-Level 23) ausgerichtet ist, muss die ICU-Bibliothek enthalten sein.

Versionsverwaltung

Nachfolgende Releases der Android-Plattform entsprechen neueren Versionen von ICU und den entsprechenden CLDR- und Unicode-Versionen. Tabelle 1 zeigt diese Entsprechung bis Android 6.0 (API-Level 23).

Tabelle 1 ICU- und CLDR-Versionen, die bis Android 6.0 (API-Level 23) verwendet wurden.

Plattform (API-Level) ITS CLDR Unicode
Android 1.5–2.0 (API-Levels 3–7) 3.8 1.5 5
Android 2.2 (API-Level 8) 4.2 1.7 5.1
Android 2.3–3.0 (API-Levels 9–13) 4.4 1,8 5.2
Android 4.0 (API-Levels 14–15) 4,6 1.9 6.0
Android 4.1 (API-Level 16–17) 4,8 2.0 6.0
Android 4.3 (API-Level 18) 50 22.1 6.2
Android 4.4 (API-Levels 19–20) 51 23 6.2
Android 5.0 (API-Level 21–22) 53 25 6.3
Android 6.0 (API-Level 23) 55.1 27.0.1 7

Das Android-Framework bietet umfassendere Unterstützung für Unicode und Internationalisierung für Apps, die auf Android 7.0 (API-Level 24) und höher ausgerichtet sind. Im nächsten Abschnitt dieser Seite finden Sie weitere Informationen zu diesem Support.

Unterstützung für Unicode und Internationalisierung in Android 7.0 (API-Level 24) und höher

Unter Android 7.0 (API-Level 24) und höher stellt die Android-Plattform eine Teilmenge der ICU4J-APIs für App-Entwickler zur Verfügung, die sie im Paket android.icu verwenden können. ICU4J ist eine Open-Source-Sammlung von Java-Bibliotheken, die Unicode- und Internationalisierungsunterstützung für Softwareanwendungen bieten.

Die ICU4J-APIs verwenden Lokalisierungsdaten, die auf dem Gerät vorhanden sind. So können Sie die Größe Ihrer App reduzieren, da die ICU4J-Bibliotheken nicht in Ihre App kompiliert werden müssen. Stattdessen können Sie sie im Framework aufrufen. In diesem Fall sollten Sie möglicherweise mehrere Versionen Ihrer APK bereitstellen, damit Nutzer mit Android-Versionen unter Android 7.0 (API-Level 24) eine Version der App herunterladen können, die die ICU4J-Bibliotheken enthält.

In diesem Abschnitt finden Sie zunächst einige grundlegende Informationen zu den erforderlichen Mindest-API-Levels für Android zur Unterstützung dieser Bibliotheken. Anschließend wird erläutert, was Sie über die Android-spezifische Implementierung von ICU4J wissen müssen. Schließlich wird beschrieben, wie Sie die ICU4J-APIs im Android-Framework verwenden.

ICU4J für Android

Android stellt eine Teilmenge der ICU4J-APIs über das Paket android.icu anstelle von com.ibm.icu bereit. Einige ICU4J-APIs werden aus Gründen wie der Einstellung der APIs oder der fehlenden Deklaration als stabil nicht vom Android-Framework bereitgestellt. Wenn das ICU-Team APIs in Zukunft einstellt, werden sie auch in Android als eingestellt markiert, sind aber weiterhin enthalten.

Hier einige Erinnerungen:

  • Die ICU4J-Android-Framework-APIs enthalten nicht alle ICU4J-APIs.
  • Die APIs im Android-Framework ersetzen nicht die Unterstützung von Android für die Lokalisierung mit Ressourcen.
  • In einigen Fällen unterstützt das Android-Framework mehr Zeichen als die ICU-Bibliotheken. Das gilt beispielsweise für die Unterstützung von Emojis in der Klasse android.text.

Von com.ibm.icu zu android.icu migrieren

Wenn Sie die ICU4J-APIs bereits in Ihrer App verwenden und die android.icu-APIs Ihren Anforderungen entsprechen, müssen Sie bei der Migration zu den Framework-APIs Ihre Java-Importe von com.ibm.icu in android.icu ändern. Anschließend können Sie Ihre eigene Kopie der ICU4J-Dateien aus der App entfernen.

Hinweis: Die ICU4J-Framework-APIs verwenden den Namespace android.icu anstelle von com.ibm.icu. Dadurch werden Namespace-Konflikte in Apps vermieden, die eigene com.ibm.icu-Bibliotheken enthalten.

Von anderen Android SDK-APIs zu android.icu-APIs migrieren

Einige Klassen in den Paketen java und android haben Entsprechungen in ICU4J. ICU4J bietet jedoch oft eine umfassendere Unterstützung für Standards und Sprachen.

In Tabelle 2 finden Sie einige Beispiele für diese Entsprechungen:

Tabelle 2. Android- und Java-ICU4J-Klassen

Klasse Alternativen
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar android.icu.util.Calendar
android.text.BidiFormatter android.icu.text.Bidi
android.text.format.DateFormat android.icu.text.DateFormat
android.text.format.DateUtils android.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter

ICU4C unter Android

Android stellt über die libicu.so-Bibliothek eine Teilmenge der ICU4C-APIs bereit, nicht über libicuuc.so oder libicui18n.so. Die APIs sind ab Android 12 (API‑Level 31) verfügbar. Die NDK-Header sind ab der NDK-Version r22b verfügbar. Über das Android NDK wird keine C++-API bereitgestellt. Einige der C-APIs sind nicht verfügbar.

Versionsverwaltung

Nachfolgende Releases der Android-Plattform entsprechen neueren Versionen von ICU und den entsprechenden CLDR- und Unicode-Versionen. Tabelle 3 zeigt diese Entsprechung ab Android 7.0 (API-Level 24). Verwenden Sie die VersionInfo.ICU_VERSION API (verfügbar ab Android 7.0), um die ICU-Versionsinformationen zur Laufzeit abzurufen.

Tabelle 3 ICU- und CLDR-Versionen, die in Android-Versionen von Android 7.0 (API-Level 24) bis Android 15 (API-Level 35) verwendet werden.

Plattform (API-Level) ITS CLDR Unicode
Android 7.0 bis 7.1 (API-Level 24 bis 25) 56 28 8.0
Android 8.0 bis 8.1 (API-Level 26 bis 27) 58,2 30.0.3 9.0
Android 9 (API-Level 28) 60,2 32.0.1 10
Android 10 (API-Level 29) 63,2 34 11.0
Android 11 (API-Level 30) 66.1 36 13.0
Android 12 (API-Level 31–32) 68.2 38.1 13.0
Android 13 (API-Level 33) 70.1 40 14
Android 14 (API-Level 34) 72.1 42 15
Android 15 (API-Level 35) 75,1 45 15.1

Einstellung des 24‑Stunden-/12‑Stunden-Zeitformats

ICU unter Android berücksichtigt nicht die Einstellung des Nutzers für das 24‑Stunden- oder 12‑Stunden-Zeitformat, die von DateFormat.is24HourFormat() abgerufen wird. Um diese Einstellung zu beobachten, verwenden Sie entweder die Zeitformatierungsmethoden DateFormat oder DateUtils oder ICU-Zeitformatierungsmuster mit entsprechenden Stundensymbolen („h“ für 12 Stunden, „H“ für 24 Stunden) für verschiedene is24HourFormat()-Rückgabewerte. Mit diesem Code wird beispielsweise ein String mit der aktuellen Uhrzeit generiert, der die 12-Stunden- oder 24-Stunden-Einstellung des Nutzers berücksichtigt:

Kotlin

val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm"
val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton(
        skeleton,
        Locale.getDefault()).format(Date()
)

Java

String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm";
String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date());

Stabilität des Transliterators

Ab Android 10 (API-Level 29) ist Transliterator verfügbar, um Text von einem Format in ein anderes zu transliterieren. Die Menge der verfügbaren Transliterations-IDs ist über Android-Versionen und Geräte hinweg instabil. Gerätehersteller können zusätzliche Transliterations-IDs hinzufügen. Entwickler müssen die verfügbaren IDs, die von Transliterator.getAvailableIDs()> abgerufen werden, prüfen, bevor sie Text transliterieren.

Lizenzierung

ICU4J wird unter der ICU-Lizenz veröffentlicht. Weitere Informationen finden Sie im ICU-Nutzerhandbuch.