Spring Boot国际化虽然在目前项目上用的比较少,但是总归是要学习一ha(四声)的。
添加Resource Bundle
首先在resources
文件夹下创建i18n
文件夹,然后右键i18n
创建Resource Bundle
添加配置文件
添加三个配置文件,分别是login.properties
、login_en_US.properties
、login_zh_CN.properties
,分别对应默认的国际化配置、英文配置、中文配置。login.properties
是默认的国际化配置文件,如果找不到国际化信息时,默认会读取login.properties
的配置信息。
这里为了演示,我只添加了一条信息,即login.password
。
login.properties
login.password=请输入密码
login_en_US.properties
login.password=please input password
login_zh_CN.properties
login.password=请输入密码
[alt type="success"]温馨提示[/alt]
批量选择配置文件后,右键点击,选择Combine to Resource Bundle
,可以批量编辑国际化配置文件
修改配置文件
修改application.properties
,配置国际化文件
spring.messages.basename=i18n.login
修改加载国际化
配置国际化支持,我们默认通过前端传递的lang
(放到header
),读取对应的国际化信息。
@Component
public class MyLocaleResolverConfig implements LocaleResolver {
private static final String PATH_PARAMETER = "lang";
private static final String PATH_PARAMETER_SPLIT = "_";
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
String lang = httpServletRequest.getHeader(PATH_PARAMETER);
Locale locale = httpServletRequest.getLocale();
if (!StringUtils.isEmpty(lang)) {
String[] split = lang.split(PATH_PARAMETER_SPLIT);
locale = new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolverConfig();
}
}
增加读取配置文件工具
增加MessageUtils.java
,用于读取国际化配置信息
@Component
public class MessageUtils {
@Resource
private MessageSource messageSource;
private static MessageSource staticMessageSource;
@PostConstruct
public void init() {
MessageUtils.staticMessageSource = messageSource;
}
/**
* 获取消息
* @param messageKey
* @return
*/
public static String getMessage(String messageKey) {
Locale locale = LocaleContextHolder.getLocale();
return staticMessageSource.getMessage(messageKey, null, locale);
}
}
增加静态类
增加配置文件key
对应的静态类,方便读取配置文件。
/**
* Description:
*
* @author : laughing
* DateTime: 2021-06-25 17:06
*/
public class MessageKey {
public static String LOGIN_PASSWORD="login.password";
}
增加测试controller
/**
* Description:
*
* @author : laughing
* DateTime: 2021-06-25 17:20
*/
@RestController
public class MessageController {
@GetMapping("message")
public String message(){
return MessageUtils.getMessage(MessageKey.LOGIN_PASSWORD);
}
}
通过postman测试
请求不带参数
当我们不携带lang
参数时,系统默认加载login.properties
测试中文
当我们测试中文时,lang
参数携带zh_CN
测试英文
当我们测试中文时,lang
参数携带en_US
评论 (0)