1.配置类 I18nConfig.java
/**
* 国际化配置
*
* @author oyj
* @since 2025-04-21
*/
@Configuration
public class I18nConfig implements WebMvcConfigurer {
@Value("${spring.messages.basename}")
private String messageBeanName;
/**
* 自定义语言解析器,根据请求头 Lang 获取语言
*/
@Bean
public LocaleResolver localeResolver() {
return new CustomHeaderLocaleResolver();
}
/**
* 配置消息源,加载多语言配置文件
* - messages_*.properties 自定义消息
* - ValidationMessages_*.properties Bean 校验提示
*/
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames(
"classpath:" + messageBeanName, // e.g., messages_zh.properties
"classpath:ValidationMessages" // e.g., ValidationMessages_zh.properties
);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
/**
* 让 Spring Validator 使用上面配置的 messageSource 进行国际化
*/
@Bean
public LocalValidatorFactoryBean getValidator(MessageSource messageSource) {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(messageSource);
return validator;
}
/**
* 显式指定 Spring MVC 使用我们的 validator
*/
@Override
public Validator getValidator() {
return getValidator(messageSource());
}
}2.请求头处理 CustomHeaderLocaleResolver.java
/**
* 根据请求头配置当前语言
*
* @author oyj
* @since 2025-04-21 10:22:14
*/
public class CustomHeaderLocaleResolver extends AcceptHeaderLocaleResolver {
// 语言请求头
private static final String LANG_HEAD = "Lang";
// 系统支持的语言
private static final List<Locale> SUPPORTED_LOCALES = ListUtil.of(
Locale.US,
Locale.SIMPLIFIED_CHINESE
);
@Override
public Locale resolveLocale(HttpServletRequest request) {
String lang = request.getHeader(LANG_HEAD);
if (lang == null || lang.isEmpty()) {
return Locale.SIMPLIFIED_CHINESE; // 默认中文
}
Locale requestLocale = Locale.forLanguageTag(lang);
// 如果是支持的语言就返回,否则默认中文
return SUPPORTED_LOCALES.contains(requestLocale)
? requestLocale
: Locale.SIMPLIFIED_CHINESE;
}
}
3.application.yaml
spring:
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages4.resources/i18n 目录新增文件
messages.properties 默认
messages_en.properties 英文
messages_zh.properties 中文