参考文档
使用场景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);