Spring系列第26篇:国际化详解

本文详细介绍了如何在Spring框架中使用ResourceBundleMessageSource进行国际化配置,涉及Locale的选择、动态参数传递以及ReloadableResourceBundleMessageSource的缓存策略。还探讨了静态消息源(StaticMessageSource)和从数据库获取国际化信息的方法。
摘要由CSDN通过智能技术生成

com/javacode2018/lesson002/demo19/

message.properties

name=您的姓名

personal_introduction=默认个人介绍:{0},{1}

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

message_zh_CN.properties:中文【中国】

name=姓名

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

message_en_GB.properties:英文【英国】

name=Full name

personal_introduction=personal_introduction:{0},{1},{0}

spring中注册国际化的bean

注意必须是MessageSource类型的,bean名称必须为messageSource,此处我们就使用ResourceBundleMessageSource这个类

package com.javacode2018.lesson002.test19.demo1;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.support.ResourceBundleMessageSource;

@Configuration

public class MainConfig1 {

@Bean

public ResourceBundleMessageSource messageSource() {

ResourceBundleMessageSource result = new ResourceBundleMessageSource();

//可以指定国际化化配置文件的位置,格式:路径/文件名称,注意不包含【语言_国家.properties】含这部分

result.setBasenames(“com/javacode2018/lesson002/demo19/message”); //@1

return result;

}

}

@1:这个地方的写法需要注意,可以指定国际化化配置文件的位置,格式:路径/文件名称,注意不包含**【语言_国家.properties】**含这部分

来个测试用例

package com.javacode2018.lesson002.test19;

import com.javacode2018.lesson002.test19.demo1.MainConfig1;

import org.junit.Test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.Locale;

public class MessageSourceTest {

@Test

public void test1() {

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

context.register(MainConfig1.class);

context.refresh();

//未指定Locale,此时系统会取默认的locale对象,本地默认的值中文【中国】,即:zh_CN

System.out.println(context.getMessage(“name”, null, null));

System.out.println(context.getMessage(“name”, null, Locale.CHINA)); //CHINA对应:zh_CN

System.out.println(context.getMessage(“name”, null, Locale.UK)); //UK对应en_GB

}

}

运行输出

您的姓名

您的姓名

Full name

第一行未指定Locale,此时系统会取默认的locale对象,本地默认的值中文【中国】,即:zh_CN,所以会获取到message_zh_CN.properties中的内容。

后面2行,都指定了Locale对象,找到对应的国际化文件,取值。

动态参数使用

注意配置文件中的personal_introduction,个人介绍,比较特别,包含了{0},{1},{0}这样一部分内容,这个就是动态参数,调用getMessage的时候,通过第二个参数传递过去,来看一下用法:

@Test

public void test2() {

AnnotationConfigApplicati

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值