使用CookieLocaleResolver实现国际化的步骤:
1.注册 messageSource,localeResolver 两个bean
2.调用localeResolver.setLocale()可改变 Locale
3.RequestContext.getMessage()ApplicationContext.getMessage()可以获取国际化信息
4.jsp页面引入spring标签后,也可直接获取国际化信息
spring 配置文件:
1 <!-- 配置国际化资源文件路径 --> 2 <bean id="messageSource" 3 class="org.springframework.context.support.ResourceBundleMessageSource"> 4 <property name="basename" value="MessageBundle" /><!-- MessageBundle_en_US.properties,MessageBundle_zh_CN.properties --> 5 <property name="defaultEncoding" value="UTF-8" /> 6 </bean> 7 <!-- 注册spring mvc的cookie locale,其他还有SessionLocaleResolver等 --> 8 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 9 <property name="cookieName" value="language" /> 10 <property name="cookieMaxAge" value="604800" /><!-- cookieMaxAge属性表示这个Cookie应该持续多少秒,-1表示这个Cookie在浏览器关闭之后就失效 --> 11 <property name="defaultLocale" value="zh_CN" /> 12 </bean>
Controller中配置:
1 @Controller 2 public class LoginController { 3 @Autowired 4 private LocaleResolver localeResolver; 5 @Autowired 6 private ApplicationContext appCtx; 7 8 @RequestMapping(value = "changeLocale") 9 public String changeLocale(String locale,HttpServletRequest request,HttpServletResponse response) { 10 11 //locale 格式为 language_country,例如 en_US,zh_CN 12 Locale setLocale = new Locale(locale.split("_")[0] , locale.split("_")[1]); 13 localeResolver.setLocale(request, response, setLocale); 14 15 //设置变量 locale 为当前 Locale 16 request.setAttribute("locale", localeResolver.resolveLocale(request)); 17 18 //按当前 Locale 获取国际化信息 19 RequestContext requestContext = new RequestContext(request); 20 System.out.println(requestContext.getMessage("username")); 21 22 //按指定 Locale 获取国际化信息 23 System.out.println(appCtx.getMessage("username", null, Locale.CHINA)); 24 System.out.println(appCtx.getMessage("username", new Object[]{}, Locale.US)); 25 26 return "locale"; 27 //return "redirect:/";//跳转回原页面 28 } 29 }
locale.jsp代码:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="http://www.springframework.org/tags" %><!-- 引入spring标签 --> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 </head> 7 <body> 8 <s:message code=‘username‘/> 9 <s:message code="hello" arguments="${locale.language},${locale.country}" argumentSeparator=","/> 10 <!-- arguments是用来给资源文件添加参数的,argumentSeparator是用来分割多个参数的标记 --> 11 ${locale}:${locale.language}_${locale.country} 12 </body> 13 </html>
MessageBundle_en_US.properties:
1 username=guodefu 2 hello=hi,locale.language is {0},country is {1}
MessageBundle_zh_CN.properties:
1 username=郭德福 2 hello=嗨,当前locale的语言是{0},国家是{1}
查看结果:
http://localhost:8080/guoguo-maven-web/changeLocale?locale=en_US
http://localhost:8080/guoguo-maven-web/changeLocale?locale=zh_CN
时间: 2024-10-07 21:34:21