1. 国际化
1.1 介绍
国际化(internationalization), 简称国际化,一个产品支持国际化是指产品在无需做大的改变就能够适应不同的语言和地区的能力,i18n是指是一种让软件在开发阶段就支持多种语言的技术。
1.2 java.util.Locale
该类对象表示了特定的地理,政治和文化地区。
重要成员:一个语言代号(ISO 639标准定义),一个国家或者区域的可选项(ISO 3169标准定义)。
示例:zh_CN, zh为语言代号, CN为国家代号,在操作 Date, Calendar等表示日期/时间的对象时,经常会用到;因为不同的区域,时间表示方式都不同。
1.3 ResourceBundle
该类的作用是读取资源文件,解决国际化问题。在定义资源文件时请注意资源文件的命名规则:
xxx_语言代码_国家代码.properties,如:i18n_zh_CN.properties。
1)简单消息
首先在国际化资源文件中加入配置:
中文: name=露丝
英文: name=rose
在使用国际化配置文件时使用key来获取值,示例如下:
2)复合消息
中文: message=你好{0},我是{1}
英文: message=hello {0}, I am {1}
注意:{}是英文字符
使用示例:
1.4 spring项目中的国际化
1)提供中英两种资源文件
i18n_en_US.properties
i18n_zh_CN.properties
2)配置国际化资源文件(在spring配置文件中添加,例如spring-mvc.xml)
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>i18n</value>
</list>
</property>
<!-- 不要忘了加上字符编码方式 -->
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
注:
bean 的id必须为messageSource,属性名称必须为basenames
可在开发阶段使用ReloadableResourceBundleMessageSource它能自动重新加载资源文件
3)配置语言区域解析器
<!--指定语言区域解析器,由它来确定使用哪个语言--><bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
注:解析器类型
- AcceptHeaderLocaleResolver(基于操作系统)
Spring采用的默认区域解析器AcceptHeaderLocaleResolver。它通过检验HTTP请求的accept-language头部来解析区域,这个头部是由用户的web浏览器根据底层操作系统的区域设置进行设定,请注意,这个区域解析器无法改变用户的区域,因为它无法修改用户操作系统的区域设置。 - SessionLocaleResolver(基于会话)
它通过检验用户会话中预置的属性来解析区域,如果该会话属性不存在,它会根据accept-language HTTP头部确定默认区域 - CookieLocaleResolver(基于Cookie)
defaultLocale:默认的语言区域
cookieName:设置cookieName名称
cookieMaxAge:设置cookieName有效时间,单位秒
cookiePath:设置cookie可见的地址,默认是“/”即对网站所有地址都是可见的,如果设为其它地址,则只有该地址或其后的地址才可见
4)配置国际化操作拦截器
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
5)页面通过标签输出内容
导入t标签
<%@ taglib prefix="t" uri="http://www.springframework.org/tags" %>
<!--使用t标签输出内容,title为国际化资源文件中定义的key-->
<t:message code="title"/>
1.5 中英文切换
1)国际化资源文件
在中文资源文件中增加定义如下:
language=英语
如果当前显示的是中文,则点击切换到的应该是英文
在英文资源文件中增加配置如下:
language=chinese
如果当前显示的是英文,在点击切换到中文。
2)编写一个controller执行切换
3)修改页面,执行语言切换
index.jsp页面文件: