SpringMVC之国际化

一、国际化

国际化(internationalization:i18n):国际化是指程序在不做任何修改的情况下,就可以在不同的国家或地区和不同的语言环境下,按照当地的语言和格式习惯的显示字符。例如:对于中国大陆的用户,会自动显示中文简体的提示信息,错误信息等;而对于美国的用户,会自动显示英文的提示信息,错误信息。

  • 本地化(Localization):国际化的程序运行在本地机器上时,能够根据本地机器的语言和地区设置相应的字符,这个过程叫做本地化。
  • 中国建设银行网站默认为中文,可选”繁体/ENGLISH”
  • Spring MVC国际化是建立在Java国际化的基础之上的
  • Spring MVC的国际化的结构:DispatcherServlet会解析一个LocaleResolver接口对象,通过它来决定用户区域,读出对应用户系统设定的语言或者用户选择的语言,确定其国际化。对于DispatcherServlet而言,只能够注册一个LocaleResolver接口对象,LocaleResolver接口的实现类都在org.springframework.web.servlet.i18n包下
  • Spring MVC也支持国际化的操作,可使用Spring MVC提供的语言区域解析器接口LocaleResolver,该接口常用实现类:
  1. AcceptLanguageLocaleResolver:控制器无需写额外的内容,可以不用显示配置
  2. SessionLocaleResolver:使用Session传输语言环境,根据用户session的变量读取区域设置,它是可变的,如果session没有设置,那么它也会使用开发者设置的默认值
  3. CookieLocaleResolver:使用Cookie传送语言环境,根据Cookie数据获取国际化信息,如果用户禁止Cookie或者没有设置,它会根据accept-language HTTP头部确定默认区域
     

国际化_页面中获取国际化资源信息

①    在页面上能够根据浏 览器语言设置的情况对文本, 时间, 数值进行本地化处理
②    可以在 bean 中获取国际化资源文件 Locale 对应的消息
③    可以通过超链接切换 Locale, 而不再依赖于浏览器的语言设置情况 

 1) 解决:

①    使用 JSTL 的 fmt 标签 
②    在 bean 中注入 ResourceBundleMessageSource 的实例, 使用其对应的
 getMessage 方法即可
③    配置 LocalResolver 和 LocaleChangeInterceptor
 

二、简单使用 

1.在resources加入两个文件(中英双语):

i18n_zh_CN.properties i18n_en_US.properties
加入后会自动生成存放i18n文件的文件夹

 i18n_zh_CN.properties:存放中文:

yhzh.label=用户帐号
yhmm.label=用户密码
language.label=EN
hello.label=你好{0}, 我叫{1}

login.error.label=帐号或密码错误

i18n_en_US.properties:存放英文:

yhzh.label=userName
yhmm.label=password
language.label=中文
hello.label=hello {0}, my name is {1}


login.error.label=account or password error

注:他们都是以键值对存在

2.配置pom.xml

<!--注1:需修改pom.xml将国际化资源文件输出到target文件夹-->
   <resource>
   	<directory>src/main/resources</directory>
        <includes>
                <!--<include>jdbc.properties</include>-->
                <include>*.properties</include>
                <include>*.xml</include>
        </includes>
   </resource>

 3.配置spring-mvc.xml

<!--1) 配置国际化资源文件 -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>i18n</value>
            </list>
        </property>
    </bean>
    <!--2) 指定语言区域解析器,由它来确定使用哪个语言 -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
    <!--3) 配置国际化操作拦截器-->
    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    </mvc:interceptors>

4.后台处理方法

    /**
     * 国际化
     * @param state
     * @param session
     * @return
     */
    @RequestMapping("/i18n")
    public String i18n(String state, HttpSession session){
        if("中文".equals(state)){
            //转换成中文
            session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.CHINA);
        }else{
            //转换成英文
            session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,Locale.US);
        }
        return "i18n";
    }

5.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/4/5
  Time: 16:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="t" uri="http://www.springframework.org/tags" %>
<%@include file="../../common/path.jsp"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="${path}/language/change"><t:message code="language.label"/> </a>
<form action="${path}/dto/userLogin" method="post">
    账号:<t:message code="yhzh.label"/><input type="text" name="uname"/><br/>
    密码:<t:message code="yhmm.label"/><input type="password" name="upwd"/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

6.测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值