ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化)

让我们快速浏览一下它所定义的方法:

  • String getMessage(String code, Object[] args, String default, Locale loc):用来从MessageSource获取消息的基本方法。如果在指定的locale中没有找到消息,则使用默认的消息。args中的参数将使用标准类库中的MessageFormat来作消息中替换值。

  • String getMessage(String code, Object[] args, Locale loc):本质上和上一个方法相同,其区别在:没有指定默认值,如果没找到消息,会抛出一个NoSuchMessageException异常。

  • String getMessage(MessageSourceResolvable resolvable, Locale locale):上面方法中所使用的属性都封装到一个MessageSourceResolvable实现中,而本方法可以指定MessageSourceResolvable实现。

当一个ApplicationContext被加载时,它会自动在context中查找已定义为MessageSource类型的bean。此bean的名称须为messageSource如果找到,那么所有对上述方法的调用将被委托给该bean。否则ApplicationContext会在其父类中查找是否含有同名的bean。如果有,就把它作为MessageSource。如果它最终没有找到任何的消息源,一个空的StaticMessageSource将会被实例化,使它能够接受上述方法的调用。


Spring目前提供了两个MessageSource的实现:ResourceBundleMessageSourceStaticMessageSource它们都继承NestingMessageSource以便能够处理嵌套的消息。StaticMessageSource很少被使用,但能以编程的方式向消息源添加消息。ResourceBundleMessageSource会用得更多一些


spring 配置国际化资源文件的两种方式

第一种将资源文件放在源码里面:

那么配置文件信息如下:

    
            class="org.springframework.context.support.ResourceBundleMessageSource">
       
           
                cn/ddx/i18n/messages
           

       

   

第二种配置文件在WEB-INF下面自己创建的目录下面:

那么配置文件信息如下:
   
            class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
       
           
                /WEB-INF/lang/messages
           

       

   


需要注意的是两者配置的class不同,红色字体部分!

配置文件路径中的“messages”为资源文件名称中_en_US.properties的前面部分,可以自定义。


转载部分:

https://www.cnblogs.com/avivahe/p/5496679.html