Unterstützung für Unicode und Internationalisierung

Android nutzt die ICU Bibliothek und das CLDR-Projekt, um Unicode und andere Internationalisierungsfunktionen bereitzustellen. Die Informationen auf dieser Seite zur Unterstützung von Unicode und Internationalisierung 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 verfügbar gemacht. Eine App, die über die verfügbaren Klassen hinaus Internationalisierungsfunktionen erfordert und auf Versionen der Plattform bis Android 6.0 (API-Level 23) ausgerichtet ist, muss die ICU-Bibliothek enthalten.

Versionsverwaltung

Nachfolgende Versionen 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 werden.

Plattform (API-Level) ICU 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
Android 4.1 (API-Level 16–17) 4,8 2 6
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

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

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 unter dem Paket android.icu verwendet werden können. ICU4J ist eine Open-Source-Sammlung von Java-Bibliotheken, die Unicode und Internationalisierungsfunktionen für Softwareanwendungen bietet.

Die ICU4J-APIs verwenden Lokalisierungsdaten, die auf dem Gerät vorhanden sind. So können Sie die Größe Ihrer App reduzieren, indem Sie die ICU4J-Bibliotheken nicht in Ihre App kompilieren. Stattdessen können Sie sie im Framework aufrufen. In diesem Fall sollten Sie 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 zuerst einige grundlegende Informationen zu den erforderlichen Android-Mindest-API-Levels zur Unterstützung dieser Bibliotheken. Anschließend wird erläutert, was Sie über die Android-spezifische Implementierung von ICU4J wissen müssen. Zum Schluss erfahren Sie, wie Sie die ICU4J-APIs im Android-Framework verwenden.

ICU4J unter Android

Android stellt eine Teilmenge der ICU4J-APIs über das android.icu Paket und nicht über com.ibm.icu zur Verfügung. Einige ICU4J-APIs werden aus Gründen wie der Einstellung der APIs oder der fehlenden Deklaration als stabil nicht vom Android-Framework verfügbar gemacht. Wenn das ICU-Team APIs in Zukunft einstellt, werden sie auch in Android als eingestellt markiert, aber weiterhin enthalten.

Einige Hinweise:

  • Die ICU4J-Android-Framework-APIs enthalten nicht alle ICU4J-APIs.
  • Die APIs im Android-Framework ersetzen nicht die Android-Unterstützung 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 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 android.icu Namespace 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 java und android Paketen haben Entsprechungen zu denen in ICU4J. ICU4J bietet jedoch oft eine umfassendere Unterstützung für Standards und Sprachen.

Tabelle 2 enthält einige Beispiele für diese Entsprechungen, die Ihnen den Einstieg erleichtern:

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 eine Teilmenge der ICU4C-APIs über die libicu.so Bibliothek und nicht über libicuuc.so oder libicui18n.so zur Verfügung. 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 verfügbar gemacht. Einige der C-APIs sind nicht verfügbar.

Versionsverwaltung

Nachfolgende Versionen 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 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) ICU CLDR Unicode
Android 7.0–7.1 (API-Level 24–25) 56 28 8
Android 8.0–8.1 (API-Level 26–27) 58.2 30.0.3 9
Android 9 (API-Level 28) 60.2 32.0.1 10
Android 10 (API-Level 29) 63.2 34 11
Android 11 (API-Level 30) 66.1 36 13
Android 12 (API-Level 31–32) 68.2 38.1 13
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 für das 24-Stunden-/12-Stunden-Zeitformat

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

Ab Android 10 (API-Level 29) wird Transliterator bereitgestellt, um Text von einem Format in ein anderes zu transliterieren. Die Menge der verfügbaren Transliterations- IDs ist in verschiedenen Android-Versionen und auf verschiedenen Geräten nicht stabil. 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.