【JavaSE入门系列】第19章_应用程序国际化

第19章应用程序国际化——v512工作室   编辑:玄玉

资源包
消息格式化
国际化与本地化
我的博客
v512工作室
中科院新科海学校

国际化与本地化
概述:国际化(InternationalizationI18N)指产品或服务能适应不同国家地区,包括语言种类的要求,即实现产品或服务的通用性
              本地化(LocalizationL10N)指针对某种特定地区(包括语言和文化等)制造或者说改造现有的产品和服务
浅析:由于开头和结尾字母之间刚好有18个英文字母,所以人们也喜欢将国际化简称为I18N
              本地用户可以使用自己的语言(包括文化习惯或表达方式)与本地化的产品进行便捷的交互
              最简单的说,所有用户可见的信息都符合当地的语言和文化习惯。复杂点说,本地化产品还应符合所在地区的法律或其它规定
              可以说,国际化是追求的目标,希望产品具有广泛的实用性,而本地化则是国际化的具体表现,或者说是它的具体实现方式
              将某种产品在多个地区进行了本地化的加工之后,才能说这种产品是一种国际化的产品,或者说它提供了国际化的支持
举例:一种本身只提供了英文标签说明的商品,为了实现国际通用的销售目的,就可以针对不同的国家地区语言,做不同的标签
              贴上不同的标签,然后在不同国家销售的过程,就可以认为是一个国际化的产品具体在某一个地区本地化的过程
目标:编写在任何受支持的区域设置中都同样能正常运行(且外观表现本地化)的代码
编码:由于Unicode编码中每个字符都有基本统一的表示形式,因此在国际化程序中主要采用Unicode编码来保存与用户交互相关的文本信息
              这是为了避免不同国家地区的系统采用的默认编码方式各不相同,可能会出现字符编码转换的问题。所以就都采用统一的Unicode编码
              最新的Unicode编码标准是Unicode5.0标准。它的标准是由国际标准化组织和一些大的IT公司组成的联合会来负责协调和修改
焦点:语言、数字格式、时间/日期格式、货币、身份证/社保号码/护照、电话号码/地址/邮政编码、度量衡、禁忌、名字和称谓
总结:目前程序国际化或本地化的主流解决方案就是把需要进行国际化或本地化处理的资源信息单独保存在资源包
              无论程序运行在哪一种系统环境中,它都会针对当前的系统环境去资源包中寻找匹配的属性文件或资源绑定类
              然后按照资源包的名字再进行逐层次的匹配性的使用,目的就是提取里面的本地化的信息,并最终显式给用户
              所以只要针对不同国家地区,增加不同的资源包,便都可以进行本地化的处理。而源代码是丝毫不需要改变的

 

 

 

资源包
概述:在国际化的应用程序中,通常以资源包(Resource Bundle)的形式来保存与运行环境相关的资源,也就是需要国际化处理的信息
              如消息文本、菜单及按钮标签等。每一个资源包对应一种用户Locale
命名<包名>_<语言代码>                                         如:MyLabels_en
              <包名>_<语言代码>_<国家/地区代码>   如:myRes_zh_CN
              可以打开IE工具Internet选项语言添加—然后就可以查看各个国家的语言代码了
表现形式属性文件(Property File)和资源绑定类(Resource Bundle Class)
属性文件:可用于保存要进行国际化的字符串信息。属纯文本文件,文件名前缀与资源包同名,后缀为“.properties
                        属性文件的格式与先前的系统属性导出文件的格式相同,参JavaSE实体书14.4.2
                        使用java.util.ResourceBundle类可以加载属性文件并读取其中的资源,实际上使用的是它的一个子类
资源绑定类:资源包的另一种表现形式,和属性文件相对应,每个资源绑定类对应一种不同的用户Locale
                        资源绑定类应与资源包同名,其中保存的也是国际化的"键—值"属性信息,但信息格式并不限于字符串类型
                        继承抽象类java.util.ListResourceBundle是定义资源绑定类的最便捷方法
                        该类中采用二维对象数组(Object[][])的形式保存所有国际化资源、并提供了按照""查找""的功能

 

 

 

消息格式化
概述:和使用NumberFormatDateFormat等工具类格式化数字和日期/时间信息的情况类似
              JDK中提供了java.text.MessageFormat类专门用来格式化包含有可变参数的文本消息
浅析:有时可能会显示给用户一些消息,比如错误提示或危险操作的警告信息等
              但是在这些消息中可能还包含一些不确定的文本,比如需要显示用户名
              这种相对复杂的或不确定内容的文本消息,就可以采用消息格式化的方式进行处理
术语消息模式Message Pattern也叫消息模式字符串模式串。它是一个字符串的形式
                                     在字符串内部通过花括号{}括起来的占位符来给出消息的主体框架
                                     可以通过MessageFormat格式化可变的数据,然后替换掉占位符
                   占位符Placeholder可以对模式串中的占位符进行可选的类型和样式设置,以获得更细致的格式化效果
                                     占位符的格式为{<index>,<type>,<style>}
总结:所谓的消息格式化,其本质就是在已构造好的消息文本中只给出主体框架
              并使用占位符来表示其中需要针对不同的用户、时间或语言等改变的内容
              然后可以创建MessageFormat对象来绑定到模式串并指定特定的Locale
              再传给它具体的参数,也可以将参数进行格式化,然后替换掉占位符
补充:需要补充一个知识点的就是:国际化应用程序中的消息格式化
              国际化程序中的消息模式字符串也需要进行本地化处理,此时可以将之保存到资源包
              以提供对应于不同Locale的版本,其实现方式与保存普通文本资源的方式相同

你可能感兴趣的:(java,java,java,编码,JavaSE,JavaSE,国际化)