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 著

Java Web 学习(7) —— Spring MVC 之国际化的更多相关文章

  1. Java Web 学习(4) —— Spring MVC 概览

    Spring MVC 概览 一. Spring MVC Spring MVC 是一个包含了 Dispatcher Servlet 的 MVC 框架. Dispatcher Servlet 实现了 : ...

  2. Java Web 学习(8) —— Spring MVC 之文件上传与下载

    Spring MVC 之文件上传与下载 上传文件 表单: <form action="upload" enctype="multipart/form-data&qu ...

  3. Java Web 学习(6) —— Spring MVC 之校验器

    Spring MVC 之校验器 数据验证 一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators. 在调用 controller 期间 ...

  4. Java Web 学习(5) —— Spring MVC 之数据绑定

    Spring MVC 之数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性. Http 请求传递的数据为 String 类型,通过数据绑定,可以将数据填充为不同类型的对象属性. 基本类型绑定 @R ...

  5. Java Web系列:Spring MVC基础

    1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层 ...

  6. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  7. 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener

    [Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...

  8. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  9. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

随机推荐

  1. python3读取图像并可视化的方法(PIL/Pillow、opencv/cv2)

    原图: 使用TensorFlow做图像处理的时候,会对图像进行一些可视化的操作.下面,就来列举一些我知道的图像读取并可视化的方法. 1. Pillow模块 1.1 Pillow模块的前生 Pillow ...

  2. Centos下使用yum命令报错 except KeyboardInterrupt, e: SyntaxError: invalid syntax

    使用yum命令报错 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid ...

  3. python将字符串插入表中避免单双引号问题

    调用pymysql.escape_string('向数据库插入的数据') 例如: import pymysql str = 'as"sdf' print(pymysql.escape_str ...

  4. centos7.6 jumpserver 堡垒机 重启启动顺序

    cd /sdata/usr/local python3. -m venv py3 source /sdata/usr/local/py3/bin/activate cd /sdata/usr/loca ...

  5. Markdown语法教程

    标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 效果如下: 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 换 ...

  6. 微服务与K8S容器云平台架构

    微服务与K8S容器云平台架构 微服务与12要素 网络 日志收集 服务网关 服务注册 服务治理- java agent 监控 今天先到这儿,希望对技术领导力, 企业管理,系统架构设计与评估,团队管理, ...

  7. IDEA快捷键用法

    1.Ctrl+滑动滚轮调节窗口显示大小(需要设置之后方可) File->Settings->Editor->General->Change fontsize with Ctrl ...

  8. CF1062F Upgrading Cities

    题意 由于这是个\(DAG\),我们考虑拓朴排序,求某个点能到的和能到它的点,这是两个问题,我们可以正反两边拓朴排序,这样就只用考虑它能到的点了 设\(f[x]\)表示\(x\)能到的点数\(+\)能 ...

  9. Spark家族:Win10系统下搭建Scala开发环境

    一.Scala环境基础 Scala对Java相关的类,接口进行了包装,所以依赖Jvm环境. Jdk 1.8 scala 依赖 scala 2.11 安装版本 idea 2017.3 开发工具 二.配置 ...

  10. Add an Item to the Navigation Control 将项目添加到导航控件

    In this lesson, you will learn how to add an item to the navigation control. For this purpose, the N ...