• 让天下没有难学的技术
    多数学员都来自推荐,这就是口碑的力量

SpringMVC国际化_通过超链接切换Locale

国际化概述

  • 默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型。
  • 当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(LocalResolver),找到后使用它获取请求所对应的本地化类型信息。
  • SpringMVC 还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。
  • SessionLocaleResolver & LocaleChangeInterceptor 工作原理
SpringMVC国际化_通过超链接切换Locale

本地化解析器和本地化拦截器

  • AcceptHeaderLocaleResolver:根据 HTTP 请求头的 Accept-Language 参数确定本地化类型,如果没有显式定义本地化解析器, SpringMVC 使用该解析器。
SpringMVC国际化_通过超链接切换Locale
public class AcceptHeaderLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
return request.getLocale();
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
throw new UnsupportedOperationException(
“Cannot change HTTP accept header – use a different locale resolution strategy”);
}
}
  • CookieLocaleResolver:根据指定的 Cookie 只确定本地化类型
  • SessionLocaleResolver:根据 Session 中特定的属性确定本地化类型
  • LocaleChangeInterceptor:从请求参数中获取本次请求对应的本地化类型。
SpringMVC国际化_通过超链接切换Locale

 1实验代码:实现中英文语言切换

  • 配置SessionLocaleResolver替换AcceptHeaderLocaleResolver完成中英文切换
<!– 配置SessionLocaleResolver对象
id必须是”localeResolver”,否则,会报错误:        
<bean id=”sessionLocaleResolver” class=”org.springframework.web.servlet.i18n.SessionLocaleResolver”></bean>
 –>
<bean id=”localeResolver” class=”org.springframework.web.servlet.i18n.SessionLocaleResolver”></bean>
HTTP Status 500 –
 
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.UnsupportedOperationException: Cannot change HTTP accept header – use a different locale resolution strategy
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:943)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
root cause
java.lang.UnsupportedOperationException: Cannot change HTTP accept header – use a different locale resolution strategy
        ……
  • 配置
<!– 配置LocaleChangeInterceptor拦截器 –>
<mvc:interceptors>
<bean id=”localeChangeInterceptor”
          class=”org.springframework.web.servlet.i18n.LocaleChangeInterceptor”></bean>
</mvc:interceptors>
  • 页面链接
 /views/i18n.jsp 增加页面链接
 <!– 切换语言 –>
<a href=”testI18N?locale=zh_CN”>中文</a> | <a href=”testI18N?locale=en_US”>英语</a>

 2切换语言的原理

切换语言的参数名称必须:locale

SpringMVC国际化_通过超链接切换Locale

想要了解跟多关于java培训课程内容欢迎关注尚硅谷java培训,尚硅谷除了这些技术文章外还有免费的高质量大 java培训课程视频供广大学员下载学习。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注