基于session国际化
1.jsp页面代码
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<a href="index.do?langType=zh">中文</a> | <a href="index.do?langType=en">英文</a><br/>
<h3><spring:message code="title"/> </h3>
<form action="login.do" method="post">
<table>
<tr>
<td><spring:message code="loginname"/></td>
<td><input type="text" id="name" name="name"></td>
</tr>
<tr>
<td><spring:message code="password"/></td>
<td><input type="text" id="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" id="submit" value="<spring:message code="submit"/>"></td>
</tr>
</table>
</form>
2.国际化资源文件
loginname =login name;
password =login name;
submit = submit;
welcome =login name welcome;
userName = administrator;
loginname = \u5E10\u53F7
password = \u5BC6\u7801
submit = \u63D0\u4EA4
welcome = \u6B22\u8FCE\u6765\u5230\u82F1\u96C4\u8054\u76DF
userName =\u5F20\u4E1C\u5761
title = \u5F20\u4E1C\u5761
3.配置springmvc-config.xml
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 国际化信息所在的文件名 -->
<property name="basename" value="com/baidu/model/messages" />
<!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 -->
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
<mvc:interceptors>
<!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
关于路径
第一种将资源文件放在源码里面:
那么配置文件信息如下:
<!-- 读取国际化资源文件 == 资源文件在包里面,路径写全包名-->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>cn/ddx/i18n/messages</value>
</list>
</property>
</bean>
那么配置文件信息如下:
<!-- 读取国际化资源文件 == 资源文件在WEB-INF下面 ,可以配置多个 --><bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>/WEB-INF/lang/messages</value>
</list>
</property>
</bean>
需要注意的是两者配置的class不同,红色字体部分!
配置文件路径中的“messages”为资源文件名称中_en_US.properties的前面部分,可以自定义。
4.java代码
@RequestMapping("/index.do")
public String userlist(Model model,User user,HttpServletRequest request,@RequestParam(value="langType", defaultValue="zh") String langType) {
if(langType.equals("zh")){
Locale locale = new Locale("zh", "CN");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
}
else if(langType.equals("en")){
Locale locale = new Locale("en", "US");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
}
else
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
RequestContext requestContext = new RequestContext(request);
model.addAttribute("loginname", requestContext.getMessage("loginname"));
model.addAttribute("submit", requestContext.getMessage("submit"));
model.addAttribute("command", user);
return "/NewFile";
}