1,国际化主要通过以下三个类完成:
2,资源文件的命名有以下三种形式:
国际化的关键类是ResourceBundle,他有一个静态方法:getBundle(String baseName,Locale locale),上面的方法根据locale加载资源文件,而locale就代表一个国家/语言。
3,国际化流程:
4,国际化配置文件中使用占位符:
提供一个MyResource_en_US.properties,内容是:
Msg=Hello,{0}!Today is {1}
提供一个MyResource_zh_CN.properties,内容是:
Msg=你好,{0}!今天是{1}
需要使用MessageFormat类。有一个静态方法:format(String pattern,Object... values)
该方法返回后面的多个参数值填充前面的pattern字符串,其中pattern字符串就是一个带占位符的字符串。
5,使用类文件替代资源文件。即将所有的key-value对存入class文件。
6,struts2的国际化,在struts.xml中配置struts.costom.i18n.resources常量,该常量的值就是国际化资源文件的baseName。
7,访问国际化信息,可以在JSP中使用标签输出国际化信息,也可以在Action中输出国际化信息。
在JSP中,通过<s:text... />输出,可指定一个name属性,代表资源文件的Key。
在Action中用getText(),接收一个name参数,定义了国际化资源文件的key。
在struts2的<s:form>表单中的元素里,可以通过key属性指定国际化信息。
例如<s:textfield name=”username” key=”user”/>
在JSP中<s:text>的中添加字标签<s:params>
如果在Action中填充占位符,可以通过getText(String key,String[] args)方法填充占位符。第二个参数args将用来填充占位符。
在国际化文件中使用表达式${username}可以从值栈中获取username。
8,包范围资源文件:package_language_country.properties,
Action范围的资源文件:ActionName_language_country.properties
临时指定资源文件:使用struts2标签<s:i18n .../>,如果将<s:i18n.../>作为<s:text>的父标签,则<s:text>标签将会直接加载<s:i18n.../>标签里指定的国际化资源文件。表单标签的key属性将会加载国际化信息。
9,用户选择程序语言,用户在页面通过下拉列表选择自己使用的语言环境,整个系统将换成用户指定的语言环境。Struts2提供了一个i18n的拦截器,且在默认拦截器栈中。I18n拦截器在执行Action之前,自动查找请求中一个名为request_locale的参数。如果存在,拦截器就将其作为参数转换成Locale对象,将其设置为用户默认的Locale(代表国家/语言环境)。I18n还会将上面生成的Locale对象保存在用户Session名为“WW_TRANS_I18N_LOCALE”的属性中,一旦用户的Session中有这个,则该属性指定Locale将会作为浏览者的默认Locale。