Android nutzt die ICU-Bibliothek und das CLDR-Projekt, um Unicode und andere Internationalisierungsfunktionen zu unterstützen. Die Erläuterung der Unterstützung von Unicode und Internationalisierung ist in zwei Abschnitte unterteilt: Android 6.0 (API-Level 23 und niedriger) und 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 sowohl lateinischer als auch nicht lateinischer Orthografien zu implementieren. Dabei werden Klassen wie Locale
, Character
und viele Unterklassen von java.text
freigegeben. Eine App, die über die freigegebenen Klassen hinausgehende Funktionen zur Internationalisierung erfordert und auf Versionen der Plattform bis Android 6.0 (API-Ebene 23) ausgerichtet ist, muss die ICU-Bibliothek enthalten.
Versionsverwaltung
Die aufeinanderfolgenden Releases der Android-Plattform entsprechen neueren Versionen von ICU und den entsprechenden CLDR- und Unicode-Versionen. Tabelle 1 zeigt diese Korrespondenz bis Android 6.0 (API-Ebene 23).
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-Ebenen 14–15) | 4,6 | 1.9 | 6.0 |
Android 4.1 (API-Level 16 bis 17) | 4,8 | 2 | 6.0 |
Android 4.3 (API-Level 18) | 50 | 22,1 | 6.2 |
Android 4.4 (API-Level 19 bis 20) | 51 | 23 | 6.2 |
Android 5.0 (API-Level 21 bis 22) | 53 | 25 | 6.3 |
Android 6.0 (API-Level 23) | 55.1 | 27.0.1 | 7 |
Das Android-Framework bietet eine 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 diesem Support.
Unterstützung für Unicode und Internationalisierung in Android 7.0 (API-Level 24) und höher
Ab Android 7.0 (API-Level 24) stellt die Android-Plattform eine Teilmenge der ICU4J APIs für App-Entwickler zur Verfügung, die sie unter dem Paket android.icu
verwenden können.
ICU4J ist eine Open-Source-Bibliothek, die Unicode- und Internationalisierungsunterstützung für Softwareanwendungen bietet.
Die ICU4J APIs verwenden Lokalisierungsdaten, die auf dem Gerät vorhanden sind. So können Sie den Speicherbedarf 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 niedriger als Android 7.0 (API-Ebene 24) eine Version der App herunterladen können, die die ICU4J-Bibliotheken enthält.
Dieser Abschnitt enthält einige grundlegende Informationen zu den Mindestanforderungen an die Android-API-Levels, die für die Unterstützung dieser Bibliotheken erforderlich sind. Anschließend wird erläutert, was Sie über die Android-spezifische Implementierung von ICU4J wissen müssen. Schließlich erfahren Sie, wie Sie die ICU4J APIs im Android-Framework verwenden.
ICU4J auf Android
Android stellt einen Teil der ICU4J-APIs über das Paket android.icu
statt über com.ibm.icu
bereit. Einige ICU4J APIs werden vom Android-Framework nicht verfügbar gemacht, z. B. weil sie verworfen oder nicht für stabil erklärt wurden. Da das ICU-Team APIs in Zukunft einstellt, werden sie auch von Android als verworfen markiert, werden aber weiterhin hinzugefügt.
Hier einige wichtige Hinweise:
- 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 durch die Klasse
android.text
.
Von com.ibm.icu zum Paket „android.icu“ migrieren
Wenn Sie die ICU4J APIs bereits in Ihrer App verwenden und die android.icu
APIs Ihre Anforderungen erfüllen, müssen Sie Ihre Java-Importe von com.ibm.icu
auf android.icu
ändern, um zu den Framework-APIs zu migrieren. 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 Namespacekonflikte 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 häufig eine umfassendere Unterstützung für Standards und Sprachen.
Tabelle 2 enthält einige Beispiele für diese Äquivalenzen:
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 einen Teil der ICU4C APIs über die libicu.so
-Bibliothek und nicht über libicuuc.so
oder libicui18n.so
bereit. Die APIs sind ab Android 12 (API-Level 31) verfügbar. Die NDK-Header sind ab dem NDK-Release r22b verfügbar.
Über das Android NDK wird keine C++-API bereitgestellt. Einige C-APIs sind nicht verfügbar.
Versionsverwaltung
Die aufeinanderfolgenden Releases der Android-Plattform entsprechen neueren Versionen von ICU und den entsprechenden CLDR- und Unicode-Versionen. Tabelle 3 zeigt diese Übereinstimmung ab Android 7.0 (API-Level 24). Verwenden Sie die
VersionInfo.ICU_VERSION
API (seit Android 7.0 verfügbar), um die ICU-Versionsinformationen zur Laufzeit abzurufen.
Plattform (API-Level) | ITS | CLDR | Unicode |
---|---|---|---|
Android 7.0–7.1 (API-Level 24–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 für das Zeitformat (24-Stunden-/12-Stunden-Format)
ICU auf Android berücksichtigt nicht die Einstellung des Nutzers für das 24-Stunden-/12-Stunden-Zeitformat, die vonDateFormat.is24HourFormat()
abgerufen wird.
Um diese Einstellung einzuhalten, verwenden Sie entweder die Zeitformatierungsmethoden DateFormat
oder DateUtils
oder verwenden Sie ICU-Zeitformatierungsmuster mit den entsprechenden Stundensymbolen („h“ für 12 Stunden, „H“ für 24 Stunden) für verschiedene is24HourFormat()
-Rückgabewerte.
Dieser Code generiert beispielsweise einen String mit der aktuellen Uhrzeit, bei der die 12h/24h-Einstellung des Nutzers berücksichtigt wird:
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) wirdTransliterator
zur Transliteration von Text zwischen verschiedenen Formaten verwendet. Die verfügbaren Transliterations-IDs sind bei allen Android-Releases und -Geräten instabil. Gerätehersteller können zusätzliche Transliterations-IDs hinzufügen. Entwickler müssen die verfügbaren IDs, die sie unter Transliterator.getAvailableIDs()
abgerufen haben, prüfen, bevor sie Text transkribieren.
Lizenzierung
ICU4J wird unter der ICU-Lizenz veröffentlicht. Weitere Informationen finden Sie im ICU-Nutzerhandbuch.