zoukankan      html  css  js  c++  java
  • 后端——框架——容器框架——spring_core——《官网》阅读笔记——第一章节7(国际化)

      国际化的知识点大致可以分为两个部分,第一部分为MessageSource对象的类结构,第二部分为使用步骤。

    1、类结构

      

      忽略其中的接口和抽象类,因为这些对象不可配置。

      剩余的类有四个,DelegatingMessageSource,StaticMessageSource,ResourceBundleMessageSource,ReloadableResourceBundleMessageSource。

    • DelegatingMessageSource:这个对象无实际的意义,当IOC容器中不存在messageSource的bean时,会加载一个空的实现类,此时注入的类型为DelegatingMessageSource,它调用getMessage方法不会获取任何国际化的信息。相当于IOC初始化MessageSource失败之后给的默认值。
    • StaticMessageSource:基本不怎么使用,我估计是测试国际化时使用的对象,类似于StaticApplicationContext。
    • ResourceBundleMessageSource:最常用的对象,它拥有ResourceBundle属性,所有获取国际化信息的方法都委托给ResourceBundle对象。
    • ReloadableResourceBundleMessageSource:支持热部署,国际化文件不必在classpath下。

    2、使用步骤

      实现国际化的步骤如下:

    1. 注入MessageSource类。在IOC初始化MessageSource时,首先会在当前IOC容器中查找ID或name为messageSource的类,如果查找不到,会继续在父容器中查找,如果所有父容器中还未找到,注入DelegatingMessageSource实现类,相当于空的实现类,此时虽然能调用getMessage等方法,但是不会返回正确的结果。
    2. 编写和配置国际化资源文件 ,格式为basename_language_country.properties。配置时需要设置ResourceBundleMessageSource的basename属性或basenames属性。basenames对应多份资源文件,是List集合,basename对应一份资源文件。
    3. 获取MessageSource对象,有很多种,实现MessageSourceAware,@AutoWire,applicationContext.getBean(“messge”),或者直接将applicationContext转换为MessageSource,调用其中的getMessage方法,其中第一个参数为code,第二个参数为占位符对应的参数,第三个为查找不到code时返回的默认值,第四个参数为Locale。

    3、示例

     配置messageSource

    <!-- 注入ResourceBundleMessageResource -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    	<property name="basenames">
    		<list>
    			<value>i18n/message</value>
    		</list>
    	</property>
    </bean>
    

      在resources下创建i18n文件夹,创建message.properties国际化文件

    # no argument
    message=Hello World
    

      调用,控制台会输出Hello  World

      public static void testMessageResource() {
        MessageSource resource = new ClassPathXmlApplicationContext("spring/application.xml");
        String message = resource.getMessage("message", null, "Default",Locale.getDefault());
        System.out.println(message);
      }
  • 相关阅读:
    Atitit 华为基本法 attilax读后感
    Atitit 华为管理者内训书系 以奋斗者为本 华为公司人力资源管理纲要 attilax读后感
    Atitit 项目版本管理gitflow 与 Forking的对比与使用
    Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理
    Atitit 乌合之众读后感attilax总结 与读后感结构规范总结
    深入理解 JavaScript 异步系列(4)—— Generator
    深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
    深入理解 JavaScript 异步系列(2)—— jquery的解决方案
    深入理解 JavaScript 异步系列(1)——基础
    使用 github + jekyll 搭建个人博客
  • 原文地址:https://www.cnblogs.com/rain144576/p/12272478.html
Copyright © 2011-2022 走看看