zoukankan      html  css  js  c++  java
  • Java Web 学习(7) —— Spring MVC 之国际化

    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 = u4f60u597d
    farewell = u518du89c1
    

    命名方式为:基准名_语言代码_国家代码,即: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 著

  • 相关阅读:
    Three.js源码阅读笔记4
    算法导论11.动态规划上
    leetcode刷题笔录1
    JavaScript的模块化:封装(闭包),继承(原型)
    leetcode刷题笔录5
    算法导论1.排序算法
    算法导论3.递归部分习题选
    Three.js Demo源码分析1.MorphTargets与BufferGeometry
    算法导论10.顺序统计树与区间树习题
    算法导论4.随机快速排序与线性时间排序
  • 原文地址:https://www.cnblogs.com/JL916/p/11901168.html
Copyright © 2011-2022 走看看