版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82848367
i18n是internationalization首字母i和末尾字母n以及中间18个字母的简称,意于国际化
更多精彩
- 更多技术博客,请移步 asing1elife’s blog
在**/src/main/resources下新建messages**文件夹
- 新增以下文件
- message.properties用于默认资源
- message_zh_CN.properties用于中文资源
- message_en_US.properties用于英文资源
spring-config.xml添加配置信息
<!-- 配置i18n资源文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 资源文件路径 -->
<property name="basename" value="classpath:messages/message"/>
<!-- 默认编码 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 指定默认资源文件 -->
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>
spring-mvc.xml添加配置信息
<!-- 将Locale信息存放于Session中 -->
<!-- id必须是localeResolver,否则会报cannot change HTTP Head ... -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
<!-- 配置拦截器获取Locale信息 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>
IndexControler.java中的添加获取Locale信息方法
public class IndexController {
@Autowired
private MessageSource messageSource;
@RequestMapping("")
public String main(Model model, HttpServletRequest request, HttpServletResponse response) {
// 设置语言格式
setLanguage(model, request, response, Locale.getDefault());
return "/index";
}
@RequestMapping("/{language}")
public String main(Model model, HttpServletRequest request, HttpServletResponse response, @PathVariable String language) {
// 分割参数
String[] languages = language.split("_");
// 设置系统语言
setLanguage(model, request, response, new Locale(languages[0], languages[1]));
return "/index";
}
/**
* 设定语言格式
*/
private void setLanguage(Model model, HttpServletRequest request, HttpServletResponse response, Locale locale) {
// 获取LocaleResolver
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
// 设置Locale信息
localeResolver.setLocale(request, response, locale);
// 传递正确的Locale信息到页面
model.addAttribute("encoding", messageSource.getMessage("encoding", new Object[0], locale));
}
}
页面中添加spring的tag用于使用message.properties中的标签信息
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
页面上使用spring标签获取标签信息
<spring:message code="title" />
首页提供一个下拉框用于手动切换语言
<div class="form select-langugae-panel">
<div class="form-group">
<select class="select-content select-content-btn">
<option value="zh_CN" <c:if test="${encoding eq 'zh_CN' }">selected</c:if>>中文</option>
<option value="en_US" <c:if test="${encoding eq 'en_US' }">selected</c:if>>English</option>
</select> <i class="select-arrow"></i>
</div>
</div>