Android nutzt die ITS Bibliothek und CLDR-Projekt, um Unicode und andere Internationalisierungen bereitzustellen Support. Auf dieser Seite werden die Unterstützung von Unicode und Internationalisierung in zwei Gruppen erläutert. Android 6.0 (API-Level 23) und niedriger und Android 7.0 (API-Level 24) und höher.
Unterstützung von Unicode und Internationalisierung ab Android 6.0 (API-Level 23)
Die Android-Plattform nutzt ICU und CLDR, um
zur Verarbeitung von lateinischen und nicht lateinischen Orthografien, die Klassen zeigen,
wie Locale
, Character
und viele Unterklassen von
java.text
Eine App, die über Funktionen zur Internationalisierung hinausgeht
die exponierten Klassen und zielt auf Versionen der Plattform bis Android 6.0 ab
(API-Level 23) 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 Zuordnung 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 bis 2.0 (API-Level 3 bis 7) | 3,8 | 1,5 | 5 |
Android 2.2 (API-Level 8) | 4.2 | 1,7 | 5.1 |
Android 2.3 bis 3.0 (API-Level 9 bis 13) | 4,4 | 1,8 | 5.2 |
Android 4.0 (API-Level 14 bis 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-Ebenen 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 Details zu diesem Support.
Unterstützung von Unicode und Internationalisierung ab Android 7.0 (API-Level 24)
Unter Android 7.0 (API-Level 24) und höher stellt die Android-Plattform einen Teil der ICU4J APIs für App-Entwickler im android.icu
-Paket bereit.
ICU4J ist eine Open-Source-Bibliothek, die Unicode- und Internationalisierungsunterstützung für Softwareanwendungen bietet.
Die ICU4J APIs verwenden auf dem Gerät vorhandene Lokalisierungsdaten. 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. Dann wird erklärt, die Sie über die Android-spezifische Implementierung von ICU4J wissen müssen. Schließlich: Sie erfahren, wie Sie die ICU4J-APIs im Android-Framework verwenden.
ICU4J auf Android
Android stellt einen Teil der ICU4J APIs nicht über das Paket com.ibm.icu
, sondern über das Paket android.icu
bereit. Einige ICU4J APIs werden vom Android-Framework nicht bereitgestellt, z. B. weil die APIs eingestellt oder nicht als stabil deklariert wurden. Wenn das ICU-Team APIs in Zukunft einstellt, werden sie auch in Android als eingestellt gekennzeichnet, aber weiterhin enthalten.
Hier noch ein paar wichtige Hinweise:
- Die ICU4J-Android-Framework-APIs umfassen 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
wie die ICU-Bibliotheken. Dies gilt z. B. für den Wert der Klasse
android.text
Unterstützung von Emojis.
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. Sie können dann
Ihre eigene Kopie der ICU4J-Dateien aus der App entfernen.
Hinweis: Die ICU4J-Framework-APIs verwenden die android.icu
Namespace 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 oft eine breitere Unterstützung für Standards und Sprachen.
Tabelle 2 enthält einige Beispiele für diese Äquivalenzen:
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 einen Teil der ICU4C-APIs über die libicu.so
-Bibliothek bereit, nicht über libicuuc.so
oder libicui18n.so
. Die APIs sind verfügbar
ab Android 12 (API-Level 31) verfügbar. Die NDK-Header sind ab der NDK-Version r22b verfügbar.
Es wird keine C++ API über das Android-NDK verfügbar gemacht. Einige C-APIs sind nicht verfügbar.
Versionsverwaltung
Aufeinanderfolgende Releases der Android-Plattform entsprechen neueren Versionen der ITS
sowie die entsprechende CLDR- und Unicode-Version. Tabelle 3 zeigt diese Übereinstimmung ab Android 7.0 (API-Level 24). Verwenden Sie die Methode
VersionInfo.ICU_VERSION
API (verfügbar seit Android 7.0), um die ITS zu erhalten
Versionsinformationen erhalten.
Tabelle 3 In Android-Versionen verwendete ICU- und CLDR-Versionen von Android 7.0 (API-Level 24) bis Android 15 (API-Level 35).
Plattform (API-Level) | ITS | CLDR | Unicode |
---|---|---|---|
Android 7.0–7.1 (API-Ebenen 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)
Die ICU unter Android berücksichtigt nicht das 24-Stunden-/12-Stunden-Zeitformat des Nutzers, das vomDateFormat.is24HourFormat()
Um diese Einstellung zu beobachten, verwenden Sie entweder
DateFormat
oder
DateUtils
Zeitformatierungsmethoden verwenden oder ICU-Zeitformatierungsmuster mit entsprechendem Stundenmuster verwenden
("h" für 12h, "H" für 24h) für verschiedene is24HourFormat()
-Rückgabewerte.
Mit diesem Code wird beispielsweise ein String mit der aktuellen Uhrzeit generiert, der der 12- oder 24-Stunden-Einstellung des Nutzers entspricht:
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)Transliterator
wird bereitgestellt, um Text von einem Format in ein anderes zu transliterieren. Die verfügbaren Transliterations-IDs sind zwischen Android-Releases und -Geräten instabil. Gerätehersteller können zusätzliche Transliterations-IDs hinzufügen. Entwickler müssen die verfügbaren IDs prüfen, die sie von
Transliterator.getAvailableIDs()
,
bevor der Text transkribiert wird.
Lizenzierung
ICU4J wird unter der ICU-Lizenz veröffentlicht. Weitere Informationen finden Sie im ICU-Nutzerhandbuch.