Spring MVC 之国际化

i18n 与 l10n

internationalization:国际化,以 i 开头,以 n 结尾,中间 18 个字母,简称 i18n。

localization:本地化,以 l 开头,以 n 结尾,中间 10 个字母,简称 l10n。

语言区域

java.util.Local表示一个语言区域。有 3 个元素:String language(语言), String country(国家), String variant(方言)。

  • language:ISO 语言代号,如:zh汉语,en英语,es西班牙语。
  • country:ISO 国家代号,如:CN中国,CA加拿大,US美国。
  • variant:操作系统,浏览器以及其他软件供应商可用这个代号来提供附加的功能或者达到语言和国家代号所不能实现的定制,两个variant间以下划线分开,且重要的放在最前。
public Locale(String language, String country, String variant) {
// ...
} public Locale(String language, String country) {
this(language, country, "");
} public Locale(String language) {
this(language, "", "");
}

Spring MVC 国际化

1. 将文本组件隔离成属性文件

Properties 继承 Hashtable,表示持久的属性集。

英语属性文件:

greetings = Hello
farewell = Goodbye

汉语属性文件:

greetings = \u4f60\u597d
farewell = \u518d\u89c1

命名方式为:基准名_语言代码_国家代码,即:message_en_US.properties,message_zh_CN.propertie。默认文件为:message.properties

2. 选择和读取正确的属性文件

Java 中使用ResourceBundle解决国际化问题,ResourceBundle是一个抽象类,通过调用静态方法来获得实例。

public static ResourceBundle getBundle(java. lang. String baseName)
public static ResourceBundle getBundle(java. lang. String baseName, Locale locale)

Spring MVC 中,不直接使用ResourceBundle,而是配置messageSource bean

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="cacheSeconds" value="10"></property>
<property name="basenames">
<list>
<!-- 属性文件位置 -->
<value>/WEB-INF/resources/message</value>
</list>
</property>
</bean>

以上配置以ReloadableResourceBundleMessageSource作为实现,也可以使用ResourceBundleMessageSource

区别:

  • 使用 ResourceBundleMessageSource,修改属性文件后,必须先重启 JVM。而 ReloadableResourceBundleMessageSource 可通过配置cacheSeconds重新加载。
  • 使用 ReloadableResourceBundleMessageSource,是在应用程序目录下搜索这些属性文件。而 ResourceBundleMessageSource,属性文件则必须放在类路径下,即 WEB-INF/class目录下。

选择语言区域

获取语言区域的方式:

  • 读取浏览器 accept-language 标题值
  • 读取 session
  • 读取 cookie

相应地,Spring MVC 语言区域解析器 bean 的实现:

  • AcceptHeaderLocaleResolver
  • SessionLocaleResolver
  • CookieLocaleResolver
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"></bean>

显示页面

通过 Spring 的 message 标签显示本地化信息。

<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<spring:message code="greetings"/>

注意:如显示中文,JSP页面编码和属性文件编码应为"UTF-8"

参考资料:《Spring MVC 学习指南》 Paul Deck 著

最新文章

  1. [NHibernate]利用LINQPad查看NHibernate生成SQL语句
  2. github添加ssh key报错Key is invalid. Ensure you&#39;ve copied the file correctly
  3. [原创]VM虚拟机安装centos6.4详细图文教程
  4. js 比较两个日期的大小的例子
  5. js、jQuery操作input大全 不断完善
  6. CSS学习笔记:transition
  7. Shell脚本中让进程休眠的方法(sleep用法)
  8. 封装bt轮播图淡入淡出效果样式
  9. wamp下安装php的xdebug调试的方法
  10. java复习(3)---字符串、数组
  11. 产品经理学Python:参数传递方式
  12. python笔记---需求文件requirements.txt的创建及使用
  13. 获取当前泛型类的传入,BaseDaoImpl&lt;T&gt; implements BaseDao&lt;T&gt;
  14. java集合类List
  15. hive中的几个参数:元数据配置、仓库位置、打印表字段相关参数
  16. .NetCore 扩展封装 Expression&lt;Func&lt;T, bool&gt;&gt; 查询条件遇到的问题
  17. 在触屏设备上面利用html5裁剪图片(转)
  18. NOIP2017 心路历程
  19. Linq中的ToList()和CopyToDataTable()
  20. python安装h5py

热门文章

  1. Spring MVC 解决乱码
  2. 版本控制工具——Git常用操作
  3. Linux系统iptables与firewalld防火墙
  4. 关于soapui接口的笔记
  5. web攻击与防御技术--SQL注入
  6. selenium-server-standalone下载网站
  7. [译]Vulkan教程(09)窗口表面
  8. 【algo&amp;ds】【pat】5.并查集及其应用
  9. Kafka简明教程
  10. SpringMVC参数绑定,这篇就够了!