Unterstützung für Unicode und Internationalisierung

Android nutzt die ICU-Bibliothek und das CLDR-Projekt, um Unicode und andere Internationalisierungen zu unterstützen. Die Unterstützung von Unicode und Internationalisierung auf dieser Seite 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 von Unicode und Internationalisierung ab 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 und Klassen wie Locale, Character und viele abgeleitete Klassen von java.text verfügbar zu machen. Eine App, die Internationalisierungsfunktionen über die angegebenen Klassen hinaus benötigt und über Android 6.0 (API-Level 23) auf Versionen der Plattform ausgerichtet ist, muss die ICU-Bibliothek enthalten.

Versionsverwaltung

Nachfolgende Releases der Android-Plattform entsprechen neueren Versionen der ICU und den entsprechenden CLDR- und Unicode-Versionen. Tabelle 1 zeigt diese Korrespondenz für Android 6.0 (API-Ebene 23).

Tabelle 1 ICU- und CLDR-Versionen bis Android 6.0 (API-Level 23).

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–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) 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 ein weit verbreiteter Open-Source-Satz von Java-Bibliotheken, der Unicode- und Internationalisierungsunterstützung für Softwareanwendungen bietet.

Die ICU4J APIs verwenden Lokalisierungsdaten, die auf dem Gerät vorhanden sind. Sie können die Ressourcen Ihrer Anwendung dadurch reduzieren, dass Sie die ICU4J-Bibliotheken nicht in Ihrer Anwendung kompilieren. Stattdessen können Sie sie im Framework aufrufen. In diesem Fall solltest du mehrere Versionen deines APKs zur Verfügung stellen. Nutzer mit Android-Versionen unter Android 7.0 (API-Level 24) können dann eine Version der App herunterladen, die die ICU4J-Bibliotheken enthält.

Dieser Abschnitt beginnt mit einigen grundlegenden Informationen zu den Android API-Mindeststufen, die zur Unterstützung dieser Bibliotheken erforderlich sind. Anschließend erfahren Sie, 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 gekennzeichnet, werden aber weiterhin hinzugefügt.

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 die Lokalisierung mit Ressourcen.
  • In einigen Fällen unterstützt das Android-Framework mehr Zeichen als die ICU-Bibliotheken. Dies gilt beispielsweise für Emojis in der Klasse android.text.

Von com.ibm.icu zum Paket „android.icu“ migrieren

Wenn Sie die ICU4J APIs bereits in Ihrer Anwendung 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 in 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 Namespace android.icu anstelle von com.ibm.icu. Dadurch sollen Namespace-Konflikte in Anwendungen vermieden werden, die ihre eigenen com.ibm.icu-Bibliotheken enthalten.

Von anderen Android SDK APIs zu android.icu-APIs migrieren

Einige Klassen in den Paketen java und android haben Äquivalente zu den Klassen in ICU4J. ICU4J bietet jedoch häufig eine umfassendere Unterstützung für Standards und Sprachen.

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 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. Es wird keine C++ API über das Android-NDK verfügbar gemacht. Einige der C APIs sind nicht verfügbar.

Versionsverwaltung

Nachfolgende Releases der Android-Plattform entsprechen neueren Versionen der ICU und den entsprechenden CLDR- und Unicode-Versionen. Tabelle 3 zeigt diese Korrespondenz ab Android 7.0 (API-Ebene 24). Mit der VersionInfo.ICU_VERSION API (verfügbar seit Android 7.0) können Sie zur Laufzeit die Versionsinformationen der ICU abrufen.

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) 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 die Einstellung für das 24-Stunden-/12-Stunden-Zeitformat des Nutzers, die von DateFormat.is24HourFormat() abgerufen wurde. Sie können diese Einstellung mit den Zeitformatierungsmethoden DateFormat oder DateUtils oder auf ICU-Zeitformatierungsmustern mit entsprechenden Symbolen für Stundenmuster („h“ für 12 h, „H“ für 24 h) für verschiedene is24HourFormat()-Rückgabewerte verwenden. 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) wird Transliterator zur Verfügung gestellt, um Text von einem Format in ein anderes zu transliterieren. 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 aus Transliterator.getAvailableIDs() prüfen, bevor sie Text transkribieren.

Lizenzen

ICU4J wird unter der ICU-Lizenz veröffentlicht. Weitere Informationen finden Sie im ICU-Nutzerhandbuch.