Unterstützung für Unicode und Internationalisierung

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.

Tabelle 1 Verwendete ICU- und CLDR-Versionen 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:

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. 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.

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-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.