SpringMVC项目用ResourceBundleMessageSource 实现Controller层返回值国际化

1、在项目resources资源下,配置文件spring-servlet.xml

<!--国际化-->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>i18n</value>
        </list>
    </property>
</bean>
<mvc:interceptors>
    <!--国际化操作拦截器如果采用基于(Session/Cookie)则必须配置-->
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>
<!--SessionLocaleResolver配置-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

 

2、在项目resources资源下添加转换中英语言的资源文件(key值)

 

 

3、Controller层返回值国际化,使用

先在每个Controller都继承的父类中封装根据语言环境转换语言的方法,根据页面中已设置好的中英文选择按钮保存cookie值,该方法可直接通过cookie值得到语言状态:

 

BaseController.java:

@Autowired
private ResourceBundleMessageSource messageSource;

/**
 * 通过不同语言环境(中英),根据对应配置文件的key返回对应环境的value值
 * @param key
 * @return
 */
public  String transformation(String key){
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    messageSource.setDefaultEncoding("utf-8");
    String languageType="zh-CN";//默认中文
    String value =null;
    Cookie[] cookies=request.getCookies();
    if(cookies!=null&&cookies.length>0){
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("userLanguage")){
                languageType = cookie.getValue();
            }
        }
    }
    if(StringUtil.isNotBlank(languageType)){
        if(languageType.equals("zh-CN")){
            value = messageSource.getMessage(key,null, Locale.CHINESE);
        }else{
            value = messageSource.getMessage(key,null,Locale.ENGLISH);
        }
    }
    return value;
}



 

然后在Controller层中可直接调用该方法转换:

/**
 *删除信息
 * @param ids
 * @return
 */
@RequestMapping("delBuyInfoById")
@ResponseBody
public AppResult<String> delBuyInfoById(String ids){

    logger.debug("删除信息");
    AppResult<String> result = new AppResult<String>();
    try {
        buyInfoService.delBuyInfoById(ids);
        result.setSuccessMsg(this.transformation("DeleteSuccessful"));//删除成功
    } catch (Exception e) {
        result.setFailMsg(this.transformation("DeleteFailed"));//删除失败
        logger.error("删除信息出错" + e.getMessage());
        e.printStackTrace();
    }
    return result;
}

 

4、Service层返回值国际化:

因为刚刚封装的方法在Controller层,service无法直接使用,只能在封装公用的I18NUtil.java方法,因为ResourceBundleMessageSource

不支持静态方法,service调用该方法时还需new一个对象。

I18NUtil.java:

 

package com.gzzhongtu.forklift.core;
import com.gzzhongtu.forklift.core.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.annotation.PostConstruct;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.Locale;

@Component
public class I18NUtil {

    private ResourceBundleMessageSource messageSource;

    public I18NUtil(){
        messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n");
    }
    /**
     * 通过不同语言环境(中英),根据对应配置文件的key返回对应环境的value值
     *
     * @param key
     * @return
     */
    public String transformation(String key) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        messageSource.setDefaultEncoding("utf-8");
        String languageType = "zh-CN";//默认中文
        String value = null;
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("userLanguage")) {
                    languageType = cookie.getValue();
                }
            }
        }
        if (StringUtil.isNotBlank(languageType)) {
            if (languageType.equals("zh-CN")) {
                //value = this.messageSource.getMessage(key, null, Locale.CHINESE);

                value = messageSource.getMessage(key, null, Locale.CHINESE);
            } else {
                //value = this.messageSource.getMessage(key, null, Locale.ENGLISH);
                value = messageSource.getMessage(key, null, Locale.ENGLISH);
            }
        }
        return value;
    }
}

 

Service层调用:

/**
 * 更新
 * @param buyInfoVo
 * @return
 */

private AppResult<String> updateBuyInfo(BuyInfoVo buyInfoVo) {
    I18NUtil I18N = new I18NUtil();
    AppResult<String> result = new AppResult<String>();
    if (this.checkCodeIsExist(buyInfoVo)) {
        result.setFailMsg(I18N.transformation("CostOfTheVehicleAlreadyExists"));//修改失败,所选车辆费用已存在
    }else {
        buyInfoMapper.updateBuyInfo(buyInfoVo);
        result.setSuccessMsg(I18N.transformation("SaveSuccessfully"));//保存成功
    }
    return result;
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值