i18n 国际化

一、国际化开发概述
软件的国际化:软件开发时 , 要使它能同时应对世界不同地区和国家的访问 , 并针对不同地区和国家的访问 , 提供相应的、符合来访者阅读习惯的页面或数据 。
国际化()又称为 i18n(读法为i 18 n , 据说是因为(国际化)这个单词从i到n之间有18个英文字母 , i18n的名字由此而来)
二、合格的国际化软件
软件实现国际化 , 需具备以下两个特征:
1、对于程序中固定使用的文本元素 , 例如菜单栏、导航条等中使用的文本元素、或错误提示信息 , 状态信息等 , 需要根据来访者的地区和国家 , 选择不同语言的文本为之服务 。
2、对于程序动态产生的数据 , 例如(日期 , 货币等) , 软件应能根据当前所在的国家或地区的文化习惯进行显示 。
三、固定文本元素的国际化
对于软件中的菜单栏、导航条、错误提示信息 , 状态信息等这些固定不变的文本信息 , 可以把它们写在一个文件中 , 并根据不同的国家编写不同的文件 。这一组文件称之为一个资源包 。
3.1、创建资源包和资源文件
一个资源包中的每个资源文件都必须拥有共同的基名 。除了基名 , 每个资源文件的名称中还必须有标识其本地信息的附加部分 。例如:一个资源包的基名是“” , 则与中文、英文环境相对应的资源文件名则为: "." "."
每个资源包都应有一个默认资源文件 , 这个文件不带有标识本地信息的附加部分 。若对象在资源包中找不到与用户匹配的资源文件 , 它将选择该资源包中与用户最相近的资源文件 , 如果再找不到 , 则使用默认资源文件 。例如:.
3.2、资源文件的书写格式
资源文件的内容通常采用"关键字=值"的形式 , 软件根据关键字检索值显示在页面上 。一个资源包中的所有资源文件的关键字必须相同 , 值则为相应国家的文字 。
并且资源文件中采用的是格式文件 , 所以文件中的所有字符都必须是ASCII字码 , 属性()文件是不能保存中文的 , 对于像中文这样的非ACSII字符 , 须先进行编码 。
例如:
国际化的中文环境的文件
国际化的英文环境的文件
java提供了一个工具用于将中文字符进行编码处理 , 的用法如下所示:
3.3、编程实现固定文本的国际化
在中提供了一个 类用于描述一个资源包 , 并且 类提供了相应的方法 , 这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示 。
类提供了一个静态方法 , 该方法用于装载资源文件 , 并创建实例:
1 Locale currentLocale = Locale.getDefault();2 ResourceBundle myResources =ResourceBundle.getBundle(basename, currentLocale);
为资源包基名(且必须为完整路径) 。
如果与该对象匹配的资源包子类找不到 。一般情况下 , 则选用默认资源文件予以显示 。
加载资源文件后 ,  程序就可以调用 实例对象的方法获取指定的资源信息名称所对应的值 。
1String value =http://www.kingceram.com/post/myResources.getString(“key");
范例:根据国家地区自动获取与之对应的资源文件
1 package me.gacl.i18n; 23 import java.util.Locale;4 import java.util.ResourceBundle;5 /**6 * @ClassName: I18NTest7 * @Description: 编程实现固定文本的国际化8 * @author: 孤傲苍狼9 * @date: 2014-8-29 下午9:34:05 10 * 11 */ 12 public class I18NTest { 13 14 public static void main(String[] args) { 15 //资源包基名(包名+myproperties) 16 String basename = "me.gacl.i18n.resource.myproperties"; 17 //设置语言环境 18 Locale cn = Locale.CHINA;//中文 19 Locale us = Locale.US;//英文 20 //根据基名和语言环境加载对应的语言资源文件 21 ResourceBundle myResourcesCN = ResourceBundle.getBundle(basename,cn);//加载myproperties_zh.properties 22 ResourceBundle myResourcesUS = ResourceBundle.getBundle(basename,us);//加载myproperties_en.properties 23 24 //加载资源文件后 ,  程序就可以调用ResourceBundle实例对象的 getString方法获取指定的资源信息名称所对应的值 。25 //String value = http://www.kingceram.com/post/myResources.getString(“key"); 26 String usernameCN = myResourcesCN.getString("username"); 27 String passwordCN = myResourcesCN.getString("password"); 28 29 String usernameUS = myResourcesUS.getString("username"); 30 String passwordUS = myResourcesUS.getString("password"); 31 32 System.out.println(usernameCN+"--"+passwordCN); 33 System.out.println(usernameUS+"--"+passwordUS); 34} 35 }