《深入浅出Spring》Spring中国际化详解

Spring中国际化

spring中国际化是通过MessageSource这个接口来支持的

org.springframework.context.MessageSource

内部有3个常用的方法用来获取国际化信息,来看一下

public interface MessageSource {
   
    /**
     * 获取国际化信息
     * @param code 表示国际化资源中的属性名;
     * @param args用于传递格式化串占位符所用的运行期参数;
     * @param defaultMessage 当在资源找不到对应属性名时,返回defaultMessage参数所指定的默认信息;
     * @param locale 表示本地化对象
     */
    @Nullable
    String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);
    /**
     * 与上面的方法类似,只不过在找不到资源中对应的属性名时,直接抛出NoSuchMessageException异常
     */
    String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;
    /**
     * @param MessageSourceResolvable 将属性名、参数数组以及默认信息封装起来,它的功能和第一个方法相同
     */
    String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
}

常见3个实现类
ResourceBundleMessageSource

这个是基于Java的ResourceBundle基础类实现,允许仅通过资源名加载国际化资源

ReloadableResourceBundleMessageSource

这个功能和第一个类的功能类似,多了定时刷新功能,允许在不重启系统的情况下,更新资源的信息

StaticMessageSource

它允许通过编程的方式提供国际化信息,一会我们可以通过这个来实现db中存储国际化信息的功能。

Spring中使用国际化的3个步骤

通常我们使用spring的时候,都会使用带有ApplicationContext字样的spring容器,这些容器一般是继承了AbstractApplicationContext接口,而这个接口实现了上面说的国际化接口MessageSource,所以通常我们用到的ApplicationContext类型的容器都自带了国际化的功能。

通常我们在ApplicationContext类型的容器中使用国际化3个步骤

步骤一:创建国际化文件

步骤二:向容器中注册一个MessageSource类型的bean,bean名称必须为:messageSource

步骤三:调用AbstractApplicationContext中的getMessage来获取国际化信息,其内部将交给第二步中注册的messageSource名称的bean进行处理

栗子

  • 创建国际化文件
    国际化文件命名格式:名称_语言_地区.properties

message.properties

name=您的姓名
personal_introduction=默认个人介绍:{
   0},{
   1}

这个文件名称没有指定Local信息,当系统找不到的时候会使用这个默认的

message_cn_ZH.properties:中文【中国】

name=姓名
personal_introduction=个人介绍:{
   0},{
   1},{
   0}

message_en_GB.properties:英文【英国】

name=Full name
personal_introduction=personal_introduction:{
   0},

你可能感兴趣的:(Spring,spring,java,前端)