参考文档

使用场景1——主动接收某个参数,并解析语言

PublicParam 是自定义的公共参数,在拦截器里面处理好了。

主动接收参数并返回一个语言环境

import com.anchi.car.coresystem.consumer.model.PublicParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import javax.servlet.http.HttpServletRequest;
import java.util.Locale;

/**
 * 对话级别的语言解析器
 *
 * @author: shaoshuaui.zheng
 * @description:
 * @date: 2019/3/16 16:22
 */
public class MySessionLocaleResolver extends SessionLocaleResolver {

    /**
     * 确定本地默认语言
     *
     * @param request 请求信息
     * @return 使用的语言环境
     */
    @Override
    protected Locale determineDefaultLocale(HttpServletRequest request) {
        // 在拦截器中设置一个paramValue属性 ,从属性中获取语言参数,并返回相应的Locale对象
        PublicParam paramValue = (PublicParam) request.getAttribute("paramValue");
        Locale locale;
        if (StringUtils.equalsIgnoreCase(paramValue.getLang(), EnumSuite.LanguageType.ZH_CN.getName())) {
            locale = Locale.SIMPLIFIED_CHINESE;
        } else {
            locale = Locale.US;
        }
        return locale;
    }

}

配置国际化文件

例如:新建三个文件,并在里面填写信息

文件名:messages.properties(默认)

driver.info.name=司机姓名

 

文件名:messages_en_US.properties(英语)

driver.info.name=join

 

文件名:messages_zh_CN.properties(中文)文件

driver.info.name=司机姓名

注入消息处理

@Autowired
private MessageSource messageSource;

使用

Locale locale = LocaleContextHolder.getLocale();
// 参数:属性、参数、语言
messageSource.getMessage("driver.info.model.info", null, locale);