SpringMVC---国际化

国际化概述

  • 国际化的需求:
    1. 在页面中根据浏览器的语言设置,对文本,数值,时间,进行本地化处理
    2. 可以在bean中获取国际化资源文件Locale对应的信息
    3. 可以根据超链接切换Locale.而不在依赖于浏览器语言的设置.
  • 解决的方式:
    1. 使用JSTL的<fmt>标签实现不同语言的显示
    2. 在SpringMVC的IOC容器中配置ResourceBundleMessagesSource的实例,使用其对应的getMessage()方法
    3. 配置 LocalResolver(本地转换器)和LocalChangeInterceptor(本地拦截器)

在这里插入图片描述

解决前两个问题

在浏览器中现实国际化信息

  • 在SpringMVC的配置文件中配置 ResourceBundleMessageSource
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="i18n"/>
    </bean>
  • 定义国际化资源文件以"i18n"开头
  1. i18n.properties
i18n.username=UserName
i18n.password=Password
  1. i18n_zh_CN.properties(用于显示中文的信息)

i18n.username=用户名
i18n.password=密码
  1. i18n_en_US.properties(用于显示英文信息)

i18n.username=UserName
i18n.password=Password
  • 在页面中使用<fmt>标签显示资源文件信息
  • 定义i18n.jsp文件,jsp页面之中需要导入:<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jstl/fmt” %> 标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>国际化显示</title>
</head>
<body>
    <fmt:message key="i18n.password"/><br/>
    <fmt:message key="i18n.username"/><br/>
</body>
</html>

  • 在SpringMVC中配置直接访问 jsp页面
<mvc:view-controller path="/i18n" view-name="i18n"/>

在这里插入图片描述

在Bean中接收国际化资源文件的信息

  • 在需要读取资源文件的Bean类中添加 ResourceBundleMessageSource 实例化对象引用
    @Autowired
    private ResourceBundleMessageSource messageSource;
  • 在请求路径映射方法中添加一个 Locale 的入参,使用ResourceBundleMessageSource 的getMessage()方法获取资源文件中的信息
    @RequestMapping("/testI18n")
    public String testI18n(Locale locale){
        String name = this.messageSource.getMessage("i18n.username",null,locale);
        String password = this.messageSource.getMessage("i18n.password",null,locale);
        System.out.println(name);
        System.out.println(password);
        return "i18n";
    }

在这里插入图片描述

通过链接切换Locale

  • 通过配置本地化拦截器和本地化解析器
  • 如果没有指定显示本地化解析器SpringMVC默认使用的是AcceptHeaderLocaleResolver,根据请求头"Accept-Language"参数确定本地化类型
  • 如果希望通过链接切换Locale 则需要配置SessionLocaleResolver,根据session属性中的信息确定本地化类型

在这里插入图片描述

在这里插入图片描述

  • 配置SpringMVC的配置文件
  • 这里需要注意的是:配置SessionLocaleResolver的时候,id值必须为localeResolver,否则会出现异常
    • Cannot change HTTP accept header - use a different locale resolution strategy

在这里插入图片描述

  • 因为在DispatcherServlet初始化localeResolver的时候,是根据"localeResolver"这个名称从IOC容器中获取的

在这里插入图片描述

  <!--配置SessionLocaleResolver
        根据session中的locale 属性改变本地化类型
    -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>

    <mvc:interceptors>
        <!--配置LocaleChangeInterceptor拦截器
        拦截请求中的locale 参数,将locale参数内容交由SessionLocaleResolver 本地化转换器处理
        -->
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>

    </mvc:interceptors>
  • 测试:定义两个超链接每个超链接包含"locale"这个参数,
<br/>
  <a href="testI18n?locale=zh_CN">中文</a>
  <br/>
  <a href="testI18n?locale=en_US">英文</a>

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值