1、通过springmvc配置文件映射国际化配置文件(由于放在resoures(Maven)下,所有无法前端无法直接获取)
<mvc:resources mapping="/i18n/messages**" location="classpath:i18n/messages**" />
访问路径:http://ip:port/项目名/i18n/messages_zh_CN.properties
2、配置一个拦截器,判断语言
<mvc:interceptors>
<bean class="com.hollycrm.hollybeacon.business.personoa.common.interceptor.LanguageInterceptor"/></mvc:interceptors>
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1,
Object arg2) throws Exception {
String language = request.getLocale().toString();
String country = request.getLocale().getLanguage();
request.getSession().setAttribute("lan", language);//语言 zh_CN
request.getSession().setAttribute("country", country);//国家zh
return true;
}
3、jquery.i18n.properties解决js端的问题
(参考文件http://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18n/)
jQuery.i18n.properties({
name : 'messages',
path : 'http://ip:port/项目名/i18n/',
mode : 'map',
language : '${lan}'
/* callback: function() {
alert( $.i18n.prop('SYS_NOTICE_NOTICESTATUS'));
} */
})
获取值:$.i18n.prop('key');
4、jsp页面
//根据语言判断basename
<%
java.util.Locale locale=request.getLocale();
if(locale.equals(java.util.Locale.US)){
request.setAttribute("language" ,"messages_en_US");
//out.print("Welcome to BeiJing");
}else if(locale.equals(java.util.Locale.CHINA)){
request.setAttribute("language" ,"messages_zh_CN");
//java.util.Locale.TAIWAN
//out.print("北京欢迎您");
}else if(locale.equals(java.util.Locale.TAIWAN)){
request.setAttribute("language" ,"messages_zh_TW");
//java.util.Locale.TAIWAN
//out.print("台湾欢迎您");
}else{
request.setAttribute("language" ,"messages_zh_CN");
}
%>
<%--
用下面种方式登录和退出登录的时候,会取不到Session,因为登录页是默认的静态映射页面,没走后台,所以不会走拦截器。
--%>
<%-- <c:choose>
<c:when test="${country=='en'}">
<c:set var="language" value="messages_en_US"/>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${lan=='zh_CN'}">
<c:set var="language" value="messages_zh_CN"/>
</c:when>
<c:when test="${lan=='zh_TW'}">
<c:set var="language" value="messages_zh_TW"/>
</c:when>
<c:otherwise>
<c:set var="language" value="messages_zh_CN"/>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose> --%>
//设置页面的语言解析文件
<fmt:bundle basename="${language}" >
必须要包含你所有用到标签<fmt:message key='key'/>
</fmt:bundle>