IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!
准备资源文件,资源文件的命名格式如下:
baseName_language_country.propertiesbaseName_language.properties
baseName.properties
其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。如:
中国大陆: baseName_zh_CN.properties
美国: baseName_en_US.properties
国际化--全局(整个应用都能访问)
第一个存放中文:itcast_zh_CN.properties 内容为:welcome=欢迎来到传智播客
第二个存放英语(美国): itcast_en_US.properties 内容为: welcome=welcome to itcast
对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:
native2ascii 源文件.properties 目标文件.properties
(2)在struts.xml中配置常量
<!-- 全局资源文件基名subjob,在没有包/action范围的资源文件情况下, 则struts在sunjob_language_country.properties中寻找key值,以实现国际化 -->
<constant name="struts.custom.i18n.resources" value="sunjob"></constant>
国际化—包范围资源文件(package及其子package下)
在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。
方法如下:
在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。
国际化—Action范围资源文件(只有此Action才能访问)
我们也可以为某个action单独指定资源文件,方法如下:
在Action类所在的路径,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。
当查找指定key的消息时,系统会先从ActionClassName_language_country.properties资源文件查找,如果没有找到对应的key,然后沿着当前包往上查找基本名为package 的资源文件,一直找到最顶层包。如果还没有找到对应的key,最后会从常量struts.custom.i18n.resources指定的资源文件中寻找。
如下:
国际化—输出带占位符的国际化信息
资源文件中的内容如下:
welcome= sunjob:{0},欢迎来到湖南{1}
在Action和jsp中取得器资源方法:
(1)在jsp页面中输出带占位符的国际化信息(默认是从全局资源文件寻找,不会从包级/Action级中资源文件寻找)
<s:text name="welcome">
<s:param><s:property value="realname"/></s:param>
<s:param>学习</s:param>
</s:text>
(2)在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。
如:
System.out.println(this.getText("welcome",new String[]{"肖华","学习"}));
国际化—JSP中直接访问某个资源文件
struts2为我们提供了<s:i18n>标签,使用<s:i18n>标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:
<body>
------------------name=sunjob-----------------------<br/>
<s:i18n name="sunjob">
<s:text name="welcome">
<s:param>肖华</s:param>
<s:param>学习</s:param>
</s:text><br/>
</s:i18n>
<!-- 默认访问全局资源文件 -->
<s:text name="login">
</s:text>
<br/>
----------------name=edu/sunjob/action/package----------------------<br/>
<s:i18n name="edu/sunjob/action/package">
<s:text name="welcome">
<s:param>肖华</s:param>
<s:param>学习</s:param>
</s:text><br/>
</s:i18n><br/>
<s:i18n name="edu/sunjob/action/package">
<s:text name="login"></s:text>
</s:i18n><br/>
--------------name=edu/sunjob/action/WordAction----------------------<br/>
<s:i18n name="edu/sunjob/action/WordAction">
<s:text name="welcome">
<s:param>肖华</s:param>
<s:param>学习</s:param>
</s:text>
</s:i18n>
</body>
国际化--如何修改用户默认语言环境
Action中:
package edu.sunjob.action;
import java.util.Locale;
import java.util.ResourceBundle;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class WordAction extends ActionSupport{
//取得默认语言的资源
public String getText(){
System.out.println(this.getText("welcome",new String[]{"肖华","学习"}));
return "success";
}
//Action中设置用户的默认语言。
public String locale(){
Locale locale = Locale.CHINESE;
//得到默认的本地语言
//Locale locale = Locale.getDefault();
ActionContext.getContext().setLocale(locale);
return "success";
}
//Action中取得指定语言的资源文件值
public String i18n(){
Locale locale = Locale.CHINESE;
ResourceBundle rb = ResourceBundle.getBundle("sunjob",locale);
String welcome = rb.getString("welcome");
System.out.println(welcome);
return "success";
}
}
JSP中:
为了简化设置用户默认语言环境,Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。 i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设为用户默认的Locale(代表国家/语言环境)。所以可以这样访问:http://localhost:8080/Struts2_06/i18n/word_getText.action?request_locale=zh_CN.注意只对同一个SESSION有效。
除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为WWW.TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script. type="text/javascript">
function langSelecter_onChanged()
{
document.getElementById("langForm").submit();
}
</script>
<%-- 设置SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性值 --%>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<%-- 使用lee.Locales创建locales实例 --%>
<s:bean id="locales" name="lee.Locales">
<%-- 为locales实例传入current参数值,如果SESSION_LOCALE为空,则返回ValueStack中locale属性值(即用户浏览器设置的Locale) --%>
<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>
<%-- 让用户选择语言的表单 --%>
<form. action="<s:url/>" id="langForm"
style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
<s:text name="languag"/>
<s:select label="Language" list="#locales.locales" listKey="value" listValue="key"
value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
name="request_locale" id="langSelecter"
nchange="langSelecter_onChanged()" theme="simple"/>
</form>
在其他页面中包含该页面:
<s:include value="selectlanguage.jsp"/>