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