Android应用开发(7)---Unicode和国际化支持

Unicode和国际化支持

Android利用 ICU库 CLDR项目来提供Unicode和其他国际化支持。本文档关于Unicode和国际化支持的讨论分为两部分:Android 6.0(API级别23)及更低级别,Android 7.0(API级别24)及更高级别。

通过Android 6.0支持Unicode和国际化(API级别23)

而Android平台使用ICU和CLDR实现各种类处理拉丁文和非拉丁文拼写法,揭露类,如LocaleCharacter和许多子类java.text应用程序的国际化功能超越了暴露的类,并且通过Android 6.0(API级别23)针对平台版本,必须在其APK中包含ICU库。

版本

Android平台的连续发行版对应于较新版本的ICU(以及相应的CLDR和Unicode版本)。表1通过Android 6.0(API等级23)显示了这种对应关系。

表1.通过Android 6.0(API级别23)使用的ICU和CLDR版本。

平台(API级别) ICU CLDR 统一
Android 1.5-2.0(API等级3-7) 3.8 1.5 5
Android 2.2(API等级8) 4.2 1.7 5.1
Android 2.3-3.0(API等级9-13) 4.4 1.8 5.2
Android 4.0(API等级14-15) 4.6 1.9 6
Android 4.1(API等级16-17) 4.8 2.0 6
Android 4.3(API等级18) 50 22.1 6.2
Android 4.4(API等级19-20) 51 23 6.2
Android 5.0(API等级21-22) 53 25 6.3
Android 6.0(API等级23) 55.1 27.0.1 7

面向Android 7.0(API级别24)或更高级别的应用可以更全面地支持Android框架公开的Unicode和国际化。本文档的下一部分提供了有关该支持的详细信息。

Android 7.0(API级别24)及更高版本支持Unicode和国际化

从Android 7.0(API级别24)开始,Android平台公开了ICU4J API的一个子集,供应用程序开发人员在该android.icu下使用ICU4J是一个开源,广泛使用的Java库集,为软件应用程序提供Unicode和国际化支持。

ICU4J API使用设备上的本地化数据。因此,您可以通过不将ICU4J库编译到APK中来缩小APK占用空间; 相反,你可以简单地在框架中向他们发出呼吁。(在这种情况下,您可能需要提供 APK的多个版本,因此运行低于Android 7.0(API级别24)的Android版本的用户可以下载包含ICU4J库的应用程序版本。)

本文档首先提供一些关于支持这些库所需的最低Android API级别的基本信息。然后,它解释了您需要了解的ICU4J的Android特定实现。最后,它会告诉您如何在Android框架中使用ICU4J API。

Android上的ICU4J

Android通过android.icu软件包公开了ICU4J API的一个子集 ,而不是com.ibm.icuAndroid框架可能会因为各种原因选择不公开ICU4J API:例如,由于API已被弃用或未声明为稳定。由于ICU团队将来会弃用API,Android也会将其标记为已弃用,但将继续包含这些API。

以下是一些需要注意的重要事项:

  • ICU4J Android框架API不包含所有的ICU4J API。
  • NDK不支持Android ICU4C。
  • Android框架中的API不能取代Android对资源本地化的支持 
  • 在某些情况下,Android框架比ICU库支持更多的字符。例如,这个android.text类对于表情符号的支持是正确的。

从com.ibm.icu迁移到android.icu包

如果您已经在您的应用中使用ICU4J API,并且 android.icuAPI满足您的要求,那么迁移到框架API需要您将Java导入从更改com.ibm.icuandroid.icu然后,您可以从APK中删除自己的ICU4J文件副本。

注意:ICU4J框架API使用android.icu 名称空间而不是com.ibm.icu这是为了避免包含自己的com.ibm.icu库的APK中的名称空间冲突

从其他Android SDK API迁移到android.icu API

javaandroid 中的某些类ICU4J 中的类有相同之处。但是,ICU4J通常为标准和语言提供更广泛的支持。

表2显示了一些启动这些等价物的例子:

表2. Android和Java ICU4J类

备择方案
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

版本

Android平台的连续发行版对应于较新版本的ICU(以及相应的CLDR和Unicode版本)。表3显示了从Android 7.0开始的这种对应关系(API级别24)。

表3. Android 7.0(API级别24)及更高版本中使用的ICU和CLDR版本。

平台(API级别) ICU CLDR 统一
Android 7.0 - 7.1(API等级24 - 25) 56 28 8
Android 8.0 - 8.1(API等级26 - 27) 58.2 30.0.3 9
Android P(API级别P) 60.2 32.0.1 10.0

24h / 12h时间格式设置

安卓ICU不会观察用户24h / 12h时间格式设置(从中获得 )为了观察设置,请使用 或 时间格式化方法或使用带有适当小时模式符号的ICU时间格式模式('h'为12小时, 'H'24小时)以获得不同的返回值。例如,此代码将生成一个具有当前时间的字符串,以观察用户12小时/ 24小时设置: DateFormat.is24HourFormat() DateFormat DateUtils is24HourFormat()
 
  
字符串 骨架 = DateFormat is24HourFormat 上下文“Hm” “hm” ; String formattedTime = android icu 文本DateFormat getInstanceForSkeleton 骨架区域设置getDefault ())。格式日期());

许可

ICU4J根据ICU许可证发布。有关详细信息,请参阅ICU用户指南。

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/80634817