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,
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
Aufeinanderfolgende Releases der Android-Plattform entsprechen neueren Versionen der ITS sowie die entsprechende CLDR- und Unicode-Version. Tabelle 1 zeigt diese Korrespondenz. bis Android 6.0 (API-Level 23) verfügbar.
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-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 dieser Unterstützung.
Unterstützung von Unicode und Internationalisierung ab Android 7.0 (API-Level 24)
Ab Android 7.0 (API-Level 24) wird die Android-Plattform
stellt eine Teilmenge der ICU4J APIs für App-Entwickler bereit.
zur Verwendung im android.icu
-Paket.
ICU4J ist ein weit verbreiteter Open-Source-Satz von Java-Bibliotheken, der Unicode
und Internationalisierungssupport für Softwareanwendungen.
Die ICU4J APIs verwenden auf dem Gerät vorhandene Lokalisierungsdaten. So können Sie die Zahl der indem Sie die ICU4J-Bibliotheken nicht in Ihrer App kompilieren. Stattdessen können Sie im Framework hervorheben. In diesem Fall sollten Sie mehrere Versionen Ihres APK ab, sodass Nutzer mit Android-Versionen vor Android 7.0 (API-Level 24) können eine Version der App herunterladen, die die ICU4J-Bibliotheken enthält.
Dieser Abschnitt beginnt mit einigen grundlegenden Informationen Die Android API-Ebenen, die zur 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 über die
android.icu
-Paket anstelle von com.ibm.icu
. Einige
ICU4J-APIs
werden vom Android-Framework nicht zugänglich gemacht,
z. B. weil die APIs nicht mehr unterstützt werden
oder nicht als stabil deklariert. Da das ICU-Team APIs in Zukunft einstellt,
Android markiert sie zwar als veraltet, führt sie aber weiterhin ein.
Hier ein paar Hinweise:
- Die ICU4J Android Framework APIs enthalten nicht alle ICU4J APIs.
- Die APIs im Android-Framework ersetzen nicht die Android-Unterstützung für 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 in Ihrer App bereits die ICU4J-APIs verwenden und die
android.icu
APIs erfüllen Ihre Anforderungen und werden dann zu
die Framework-APIs erfordern, dass Sie Ihre Java-Importe ändern.
von com.ibm.icu
bis android.icu
. 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
. Damit wird ein Namespace vermieden
Konflikten in Apps, die ihre eigenen com.ibm.icu
-Bibliotheken enthalten.
Von anderen Android SDK APIs zu android.icu-APIs migrieren
Für einige Klassen in den Paketen java
und android
wurden
entsprechen denen auf der ICU4J. ICU4J bietet jedoch oft umfassendere
Standards und Sprachen unterstützt.
In Tabelle 2 finden Sie einige Beispiele für diese Entsprechungen, um Ihnen den Einstieg zu erleichtern:
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.
anstelle von libicuuc.so
oder libicui18n.so
. Die APIs sind verfügbar
ab Android 12 (API-Level 31) verfügbar. Die NDK-Header sind verfügbar beginnend mit
NDK-Release r22b.
Es wird keine C++ API über das Android-NDK verfügbar gemacht. Einige der 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 Korrespondenz.
ab Android 7.0 (API-Level 24). Verwenden Sie die Methode
<ph type="x-smartling-placeholder"></ph>
VersionInfo.ICU_VERSION
API (verfügbar seit Android 7.0), um die ITS zu erhalten
Versionsinformationen erhalten.
Plattform (API-Level) | ITS | CLDR | Unicode |
---|---|---|---|
Android 7.0–7.1 (API-Level 24–25) | 56 | 28 | 8.0 |
Android 8.0–8.1 (API-Level 26–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 24-Stunden-/12-Stunden-Zeitformat
Die ICU unter Android berücksichtigt nicht das 24-Stunden-/12-Stunden-Zeitformat des Nutzers, das vom <ph type="x-smartling-placeholder"></ph>DateFormat.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.
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)Transliterator
wird bereitgestellt, um Text von einem Format in ein anderes zu transliterieren. Das Set der verfügbaren Transliteration
IDs sind bei allen Android-Releases und -Geräten instabil. Der Gerätehersteller fügt möglicherweise
Transliterations-IDs. Entwickler müssen die verfügbaren IDs prüfen, die sie von
<ph type="x-smartling-placeholder"></ph>
Transliterator.getAvailableIDs()
,
bevor der Text transkribiert wird.
Lizenzierung
ICU4J wird unter der ICU-Lizenz veröffentlicht. Weitere Informationen finden Sie auf der ICU. Nutzerhandbuch.