本文主要介绍 spring-boot 提供的国际化方案,如果需要动态扩展并维护国际化信息,阁下又该如何应对呢?我这里先卖个关子(后续会出相关文章),欢迎大家讨论。
1、什么是国际化?
国际化(Internationalization 简称 I18n,其中“I”和“n”分别为首末字符,18 则为中间的字符数)是指软件开发时应该具备支持多种语言和地区的功能。
在 Spring 项目中实现国际化,通常需要以下 3 步:
1.创建国际化资源(配置)文件
2.使用 ResourceBundleMessageSource 配置指定资源文件
3.获取国际化内容
1.1 创建国际化配置文件
在 resources 目录下建立目录 i18n 用于存放国际化资源文件。
在 i18n 目录下新建三个文件: messages.properties、messages_en_US.properties、messages_zh_CN.properties。结构如下图所示:
messages.properties(默认配置为中文) 文件内容如下(Unicode 编码后 SUCCESS=\u6210\u529f 防止中文乱码) :
SUCCESS=成功
messages_en_US.properties(英文配置)文件内容如下:
SUCCESS=success
messages_zh_CN.properties(中文配置)文件内容与默认配置相同。
1.2 配置指定资源文件
第一种,在配置文件中指定资源文件路径
properties 配置方式
spring.messages.basename=i18n/messages
yml 配置方式
spring:
messages:
basename: i18n/messages
第二种,Java代码配置(可以更灵活的进行配置,示例中有所体现)
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import java.util.List;
@Configuration
public class I18nConfiguration {
private List<String> basenames;
public I18nConfiguration() {
}
public I18nConfiguration(List<String> basenames) {
this.basenames = basenames;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:i18n/messages");
if (null != basenames && !basenames.isEmpty()) {
basenames.forEach(messageSource::setBasename);
}
return messageSource;
}
}
1.3 获取国际化内容
启动项目访问接口文档,请求头中切换语言类型即可。
1.中文
2.英文
整合DEMO仓库地址