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 vonDateFormat.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) istTransliterator
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.