软件开发国际化是一个很常规的需求,实现国际化的方法也比较多,比如前端国际化方法jQuery.i18n.properties,现在介绍采用ResourceBundle和Local对象实现Javaweb国际化。
ResourceBundle是一个资源包,包含不同区域(Local)的资源集合,只要向ResouceBundle提供一个特定的Locale对象,ResouceBundle就会把相应的资源返回给你。
Locale 对象表示了特定的地理、政治和文化地区。
实现javaweb国际化步骤:
1、建立资源文件
ResourceBundle对象读取的文件是.property文件,在建立建立property文件的时候特别要注意2点:
(1)命名规则:自定义基名语言代码国别代码.properties
例resource_en_US.property(英文)
toolbar.welcome=Welcome
toolbar.modifyPassword=Reset Password
toolbar.gismap=GIS Map
resource_zh_CN.property(中文)
toolbar.welcome=欢迎
toolbar.modifyPassword=修改密码
toolbar.gismap=GIS地图
(2)property资源文件的存放位置
资源文件需要放到src的根目录下面,或者放到自己配置的classpath下面,否则ResourceBundle对象读取不到资源文件
2、初始化(获取)Local对象
request.getLocale()//根据当地的语言环境获取Local对象
或者可以利用构造函数获取自定义的Local对象,例:
Locale locale = Locale.US;
Locale locale = Locale.CHINA;
3、根据Local对象获取ResourceBundle对象
通过ResourceBundle类提供的静态方法获取对象:
ResourceBundle bundle = ResourceBundle.getBundle("resource", locale);
该方法需要两个参数,第一个参数是资源文件名,即自定义资源文件的基名,切记不要添加.property后缀名;第二个参数是一个local对象
获取到bundle对象之后,通过对象调用getString()方法便可读取资源文件
读取资源文件字符串的时候需要注意一点,由于property资源文件默认采用的是ISO-8859-1编码,而webapp界面一般采用的都是utf-8编码,需要对读取的字符串资源进行编码转换,例:
String stringData = new String(bundle.getString("toolbar.welcome").getBytes("ISO-8859-1"),"utf-8");
获取到资源文件中的字符串后,便可以利用占位符<%=stringData %>替代jsp页面中的静态写法,这样jsp文件显示的内容就会根据当地的语言环境进行中英文切换。