SpringBoot整合i18n(多语言)
# 依赖
无需额外引入, spring-boot-starter-web
默认支持。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
# i18n 翻译文件
IDEA 中 resources\i18n
右键 New
添加要支持的语言
base name 通常为: messages
# applicant.yml
spring:
# 国际化配置
messages:
basename: i18n/messages
encoding: UTF-8
fallbackToSystemLocale: false
# 使用
使用中需要用到两个对象: MessageSource
、 Locale
MessageSource:可通过 Spring 容器获取
Locale:可通过请求对象 HttpServletRequest
获取
# 自定义返回
# 方法 1
@RestController
public class HelloController {
@Autowired
MessageSource messageSource;
@GetMapping("/")
public String index(Locale locale) {
return messageSource.getMessage("error.notfound", null, locale);
}
}
# 方法 2
public class I18nUtil {
public static String getMessage(String code) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
MessageSource messageSource = SpringUtil.getBean(MessageSource.class);
return messageSource.getMessage(code, null, request.getLocale());
}
}
# 入参校验
javax.validation
本身就是支持多语言的,查看源码 String message() default "{javax.validation.constraints.NotBlank.message}";
他是通过 el 表达式来实现的,因此只需替换成我们所需的 key 即可。
值得注意的是,这里 i18n 的文件路径为 resources/ValidationMessages
@NotBlank(message = "{password.notBlank}")
@Pattern(regexp = RegularConstants.PASSWORD, message = "{password.pattern}")
private String password;
# 参考
上次更新: 2024/03/11, 22:37:05