Skip to content

Most visited

Recently visited

navigation

Internationalization on Android

Android leverages the ICU library and CLDR project to provide Unicode and other internationalization support. This document's discussion of Unicode and internationalization support is divided into two sections: Android 6.0 (API level 23) and lower, and Android 7.0 (API level 24) and higher.

Unicode and internationalization support through Android 6.0 (API level 23)

The Android platform uses ICU and CLDR to implement various classes for handling both Latin and non-Latin orthographies, exposing classes like Locale, Character, and many subclasses of java.text. An app that internationalization functionalities beyond the exposed classes, and targets versions of the platform through Android 6.0 (API level 23), must include the ICU library in its APK.

Versioning

Successive releases of the Android platform correspond to newer versions of ICU (and the corresponding CLDR and Unicode versions). Table 1 shows this correspondence through Android 6.0 (API level 23).

Table 1. ICU and CLDR versions used through Android 6.0 (API level 23).

Platform (API level) ICU CLDR Unicode
Android 1.5–2.0 (API levels 3–7) 3.8 1.5 5.0
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 levels 14–15) 4.6 1.9 6.0
Android 4.1 (API levels 16–17) 4.8 2.0 6.0
Android 4.3 (API level 18) 50 22.1 6.2
Android 4.4 (API levels 19–20) 51 23 6.2
Android 5.0 (API levels 21–22) 53 25 6.3
Android 6.0 (API level 23) 55.1 27.0.1 7.0

Apps targeting Android 7.0 (API level 24) or higher can leverage more comprehensive support for Unicode and internationalization that is exposed by the Android framework. The next section of this document provides details about that support.

Unicode and internationalization support in Android 7.0 (API level 24) and higher

Starting from Android 7.0 (API level 24), the Android platform exposes a subset of the ICU4J APIs for app developers to use under the android.icu package. ICU4J is an open-source, widely used set of Java libraries providing Unicode and internationalization support for software applications.

The ICU4J APIs use localization data present on the device. As a result, you can reduce your APK footprint by not compiling the ICU4J libraries into your APK; instead, you can simply call out to them in the framework. (In this case, you may want to provide multiple versions of your APK, so users running versions of Android lower than Android 7.0 (API level 24) can download a version of the app that contains the ICU4J libraries.)

This document begins by providing some basic information on the minimum Android API levels required to support these libraries. It then explains what you need to know about the Android-specific implementation of ICU4J. Finally, it tells you how to use the ICU4J APIs in the Android framework.

ICU4J on Android

Android exposes a subset of the ICU4J APIs via the android.icu package, rather than com.ibm.icu. The Android framework may choose not to expose ICU4J APIs for various reasons: for example, because APIs are deprecated or not declared stable. As the ICU team deprecates APIs in the future, Android will also mark them as deprecated but will continue to include them.

Here are a few important things to note:

Migrating to the android.icu package from com.ibm.icu

If you are already using the ICU4J APIs in your app, and the android.icu APIs meet your requirements, then migrating to the framework APIs requires you to change your Java imports from com.ibm.icu to android.icu. You may then remove your own copy of ICU4J files from the APK.

Note: The ICU4J framework APIs use the android.icu namespace instead of com.ibm.icu. This is to avoid namespace conflicts in APKs that contain their own com.ibm.icu libraries.

Migrating to android.icu APIs from other Android SDK APIs

Some classes in the java andandroid packages have equivalents to those found in ICU4J. However, ICU4J often provides broader support for standards and languages.

Table 2 shows some examples of these equivalencies to get you started:

Table 2.Android and Java ICU4J classes

Class Alternatives
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

Versioning

Successive releases of the Android platform correspond to newer versions of ICU (and the corresponding CLDR and Unicode versions). Table 3 shows this correspondence starting from Android 7.0 (API level 24).

Table 3. ICU and CLDR versions used in Android 7.0 (API level 24) and higher.

Platform (API level) ICU CLDR Unicode
Android 7.0–7.1 (API levels 24–25) 56 28 8.0
Android O 58.2 30.0.3 9.0

Licensing

ICU4J is released under the ICU license. For details, see the ICU User Guide.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.