1、写好国际化资源文件
welcomeinfo = welcome to mypage.com
username = USERNAME
password = PASSWORD
loginBtn = LOGIN
welcomeinfo = \u6B22\u8FCE\u6765\u5230\u6211\u7684\u4E3B\u9875
username = \u7528\u6237\u540D
password = \u5BC6\u7801
loginBtn = \u767B\u5F55
2、让Spring的ResourceBundleMessageSource管理国家化资源文件
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="loginpage/login"></property>
</bean>
3、直接去页面取值
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<h1>
<fmt:message key="welcomeinfo"/>
</h1>
<form action="">
<fmt:message key="username"/>:<input /><br>
<fmt:message key="password"/>:<input /><br>
<input type="submit" value="<fmt:message key="loginBtn"/>"/><br>
</form>
4、现象:是按照浏览器带来语言信息决定
SpringMVC中区域信息是由区域信息解析器得到的
程序中获取国际化相关信息
@RequestMapping("/tologinpage")
public String tologinpage(Locale locale,Model model) {
System.out.println(locale);
String welcomeinfo = messageSource.getMessage("welcomeinfo", null, locale);
System.out.println(welcomeinfo);
model.addAttribute("国际化相关信息",welcomeinfo);
return "login";
}
点击链接进行中英文切换(国际化信息是要能改变的)
方法一:自定义区域信息解析器
SpringMVC.xml
<!-- 自定义区域信息解析器 -->
<bean id="localeResolver" class="com.lyj.controller.MyLocalResolver"></bean>
MyLocaleResolver
package com.lyj.controller;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.LocaleResolver;
public class MyLocalResolver implements LocaleResolver{
/**
* 解析返回locale
*/
@Override
public Locale resolveLocale(HttpServletRequest req) {
// TODO Auto-generated method stub
//zh_CN
Locale l = null;
String localeString = req.getParameter("locale");
//如果带了locale参数就用带了的
//如果没带就用请求头的
if(localeString!=null&&!localeString.equals("")){
l = new Locale(localeString.split("_")[0], localeString.split("_")[1]);
}else{
l =req.getLocale();
}
return l;
}
/**
* 修改locale
*/
@Override
public void setLocale(HttpServletRequest arg0, HttpServletResponse arg1,
Locale arg2) {
throw new UnsupportedOperationException(
"Cannot change HTTP accept header - use a different locale resolution strategy");
}
}
login.jsp
<a href="tologinpage?locale=zh_CN">中文</a>/<a href="tologinpage?locale=en_US">English</a>
方法二:使用自带的SessionLocaleResolver
Controller
@RequestMapping("/tologinpage")
public String tologinpage(@RequestParam(value="locale",defaultValue="zh_CN")String localeStr, Locale locale,Model model
,HttpSession session) {
/*System.out.println(locale);
String welcomeinfo = messageSource.getMessage("welcomeinfo", null, locale);
System.out.println(welcomeinfo);
model.addAttribute("国际化相关信息",welcomeinfo);*/
Locale l = null;
if(localeStr!=null&&!localeStr.equals("")){
l = new Locale(localeStr.split("_")[0], localeStr.split("_")[1]);
}else{
l =locale;
}
session.setAttribute(SessionLocaleResolver.class.getName()+".LOCALE", l);
return "login";
}
SpringMVC.xml
<!-- sessionLocaleResolver,区域信息从session中拿 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
方法三:SessionLocaleResolver配合LocaleChangeInterceptor拦截器
login.jsp
<a href="tologinpage?locale=zh_CN">中文</a>/<a href="tologinpage?locale=en_US">English</a>
SpringMVC
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
controller
@RequestMapping("/tologinpage")
public String tologinpage(@RequestParam(value="locale",defaultValue="zh_CN")String localeStr, Locale locale,Model model
,HttpSession session) {
return "login";
}