1.首先是环境的配置,环境配置步奏很简单,只需要在springmvc的配置文件spring-mvc.xml里面配置国际化的内容:
<!-- 国际化支持 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>i18n.message</value>//这里是你存放你的语言配置的文件,比如我的定义的message_en_US.properties和message_zh_CN.properties是放在src下面的i18n包下
</property>
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=zh_CN -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />//拦截本地语言变化的拦截器
</mvc:interceptors>
<!-- Saves a locale change using a session-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/> //基于Session的国际化配置
2.初始化国际化,我们一般是在登入页面先初始化一下语言,一般是初始化为中文,当然你也可以根据你的需求初始化语言:
<%
Locale locale = (Locale) request.getSession().getAttribute(
SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
if (locale == null) {
locale = Locale.CHINA;
}
request.getSession().setAttribute(
SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
%>
3.选着国际化,我们一般会在登入页面会让操作人员选择不同的语言,例如在login.jsp中都会这里配置选择语言操作:
<ul>
<li>
<a href="?locale=zh_CN">中文简体</a>
</li>
<li>
<a href="?locale=en_US">English</a>
</li>
</ul>
注:这里用户选择不同的语言,就只需要更改本地语言即可。
4.前端页面中需要国际化的内容根据语言从配置好的语言文件中读取:
一般我们都会用spring自带的一个标签进行读取:<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>,把这个报表引入到jsp中,然后页面上读取:<spring:message code="username" />,username就是语言配置文件中的key值,这样就会根据当前语言会从不同的配置文件中读取相应的value值。
5.后台中需要国际化的内容根据语言从配置好的语言文件中读取:
后台我们就不同像前端一样用spring标签读取,不过也有办法,这里提供一个帮助类:
package com.kamneng.directsellonline.utils;
/**
* @description controller中获得i18n解析
* @author lizhaoyang
* @since 2013-12-27
* @version 1.0
*/
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
public class DynamicTextHandler {
/**
* Method loadResBundle.与指定路径加载资源包。如果语言环境是null,加载默认的包。
* @param path
* @param httpSession
* @return ResourceBundle
* @throws MissingResourceException
*/
public static ResourceBundle loadResBundle(HttpSession httpSession) throws MissingResourceException {
Locale locale = null;
if (null != httpSession) {
locale = (Locale) httpSession.getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
System.out.println(locale);
}
if (locale == null || !Locale.CHINA.equals(locale)) {
locale = Locale.US;
}
return ResourceBundle.getBundle("i18n/message", locale);
}
/**
* The method gets the string message from the bundle files
*
* @param key
* - message 的 key值
* @return String message 的 value 值
*
*/
public static String getText(HttpSession httpSession, String key) {
String result = null;
try {
result = loadResBundle(httpSession).getString(key);
if (result == null) {
result = key;
}
} catch (MissingResourceException e) {
result = key;
}
return result;
}
}
最后后台方法中读取配置文件的方法:DynamicTextHandler.getText(session, "key");形参session顾名思义为HttpSession对象,key为配置文件中的key值,这样就能根据当前语言读取到相应配置文件中的value值了。
总结:这里内容是我项目中国际化的大部分内容了,由于接触java时间也不长,可能语言各方面组织的不怎么好,只是希望能帮助需要国际化的朋友。