Java学习19 应用程序国际化

国际化和本地化

  • 国际化,Internationalization,I18N
  • 本地化,Localization,L10N
  • 目标: 编写在任何受支持的区域设置中都能正常运行(且外观表现本地化)的代码
  • 国际化主要采用Unicode编码格式

数字、日期和时间国际化

  • 语言
  • 数字格式
  • 时间/日期格式
  • 货比
  • 身份证、社保号码和护照
  • 电话号码、地址和邮政编码
  • 度量衡
  • 禁忌
  • 名字和称谓
这里写代码片

资源包和属性文件

资源包

Resource Bundle,用于保存于运行环境相关的资源,如消息文本、菜单及按钮标签等,每个资源包对应一种用户Locale

  • 资源包的命名格式

    • <包名>_<语言代码>_<国家/地区代码>
      如:myRes_zh_CN
    • <包名>_<语言代码>
      如:myLabels_en
  • 资源包的两种表现形式:

    • 属性文件(Properties File)

      • 后缀:*.properties
      • java.util.ResourceBundle类,读取资源包的工具
      • unicode转换工具:native2ascii a.properties b.properties
    • 资源绑定类(Resource Bundle Class)

      • 保存的也是国际化的key-value属性信息,但格式不限于字符串类型
      • java.util.ListResourceBundle类,采用二维对象数组Object[][]形式保存国际化资源
      • 子类实现getContent()方法
  • getBundle
    getBundle 使用基本名称、指定的语言环境和默认语言环境(从 Locale.getDefault 获得)来生成候选包名称 序列。如果指定语言环境的语言、国家/地区和变量都是空字符串,则基本名称就是唯一的候选包名称。否则,从指定语言环境(language1、country1 和 variant1)和默认语言环境(language2、country2 和 variant2)的属性值生成下列序列:

    baseName + “_” + language1 + “_” + country1 + “_” + variant1
    baseName + “_” + language1 + “_” + country1
    baseName + “_” + language1
    baseName + “_” + language2 + “_” + country2 + “_” + variant2
    baseName + “_” + language2 + “_” + country2
    baseName + “_” + language2
    baseName

消息格式化

java.text.MessageFormat,用于格式化包含有可变参数的文本消息

  • 调用MessageFormat.format()方法,替换占位符

相关术语:

  • 消息模式,Message Pattern
  • 占位符,Placeholder
    • 类型和样式: {, ,