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 Erläuterung der Unicode- und Internationalisierungsunterstützung auf dieser Seite ist in zwei Abschnitte unterteilt: Android 6.0 (API-Level 23) und niedriger sowie Android 7.0 (API-Level 24) und höher.

Unicode- und Internationalisierungsunterstützung über 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. Eine App, die Internationalisierungsfunktionen über die bereitgestellten Klassen hinaus benötigt und auf Versionen der Plattform bis Android 6.0 (API-Level 23) ausgerichtet ist, muss die ICU-Bibliothek enthalten.

Versionsverwaltung

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

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-Level 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-Level 9–13) 4.4 1,8 5.2
Android 4.0 (API-Level 14–15) 4,6 1.9 6.0
Android 4.1 (API-Level 16–17) 4,8 2 6.0
Android 4.3 (API-Level 18) 50 22,1 6.2
Android 4.4 (API-Level 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.0

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 Details zu dieser Unterstützung.

Unicode- und Internationalisierungsunterstützung in Android 7.0 (API-Level 24) und höher

Für Android 7.0 (API-Level 24) und höher stellt die Android-Plattform App-Entwicklern eine Teilmenge der ICU4J APIs zur Verfügung, die im Paket android.icu verwendet werden können. ICU4J ist eine weit verbreitete Open-Source-Sammlung von Java-Bibliotheken, die Unicode- und Internationalisierungsunterstützung für Softwareanwendungen bietet.

Die ICU4J APIs verwenden Lokalisierungsdaten, die auf dem Gerät vorhanden sind. Dadurch könnt ihr die Größe eurer App reduzieren, da ihr die ICU4J-Bibliotheken nicht in eure App kompilieren müsst. Stattdessen könnt ihr sie im Framework aufrufen. In diesem Fall sollten Sie mehrere Versionen Ihres APKs bereitstellen, damit Nutzer mit Android-Versionen vor Android 7.0 (API-Level 24) eine Version der App herunterladen können, die die ICU4J-Bibliotheken enthält.

In diesem Abschnitt finden Sie grundlegende Informationen zu den Mindest-Android-API-Levels, die für die Unterstützung dieser Bibliotheken erforderlich sind. Anschließend wird erläutert, was du über die Android-spezifische Implementierung von ICU4J wissen musst. Schließlich wird beschrieben, wie du die ICU4J APIs im Android-Framework verwendest.

ICU4J auf Android

Android stellt eine Teilmenge der ICU4J-APIs über das Paket android.icu und nicht über com.ibm.icu bereit. Einige ICU4J-APIs werden vom Android-Framework nicht bereitgestellt, z. B. weil die APIs veraltet sind oder nicht als stabil deklariert wurden. Wenn das ICU-Team in Zukunft APIs einstellt, werden sie auch von Android als veraltet markiert, aber weiterhin unterstützt.

Hier sind 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. Dies gilt beispielsweise für die Unterstützung von Emojis durch die Klasse android.text.

Von com.ibm.icu zum Paket android.icu migrieren

Wenn du die ICU4J APIs bereits in deiner App verwendest und die android.icu APIs deinen Anforderungen entsprechen, musst du für die Migration zu den Framework APIs deine Java-Importe von com.ibm.icu zu 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. So 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 zu denen in ICU4J. ICU4J bietet jedoch häufig 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 auf Android

Android stellt eine Teilmenge der ICU4C-APIs über die libicu.so-Bibliothek 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

Aufeinanderfolgende Releases der Android-Plattform entsprechen neueren Versionen von ICU und den entsprechenden CLDR- und Unicode-Versionen. In Tabelle 3 wird diese Entsprechung ab Android 7.0 (API-Level 24) dargestellt. Verwenden Sie die API VersionInfo.ICU_VERSION (verfügbar seit 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–7.1 (API-Level 24–25) 56 28 8.0
Android 8.0–8.1 (API-Level 26–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.0
Android 14 (API-Level 34) 72,1 42 15.0
Android 15 (API-Level 35) 75,1 45 15.1

Einstellung für 24-Stunden-/12-Stunden-Format

ICU unter Android berücksichtigt nicht die Einstellung des Nutzers für das 24-Stunden-/12-Stunden-Zeitformat, die über DateFormat.is24HourFormat() abgerufen wird. Wenn du diese Einstellung berücksichtigen möchtest, verwende entweder die Zeitformatierungsmethoden DateFormat oder DateUtils oder ICU-Zeitformatierungsmuster mit den entsprechenden Stundenmustersymbolen („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-/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 Transliterator

Ab Android 10 (API-Level 29) wird Transliterator bereitgestellt, um Text von einem Format in ein anderes zu transkribieren. Die verfügbaren Transliterations-IDs sind je nach Android-Version und Gerät unterschiedlich. Gerätehersteller können zusätzliche Transliterations-IDs hinzufügen. Entwickler müssen die verfügbaren IDs, die sie von Transliterator.getAvailableIDs() erhalten, prüfen, bevor sie Text transliterieren.

Lizenzierung

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