springmvc国际化的实现

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时间也不长,可能语言各方面组织的不怎么好,只是希望能帮助需要国际化的朋友。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值