1.创建中英文文件
创建三个/两个文件(第一个可以不提供)
1.xxx模块_message.properties
2.xxx模块_message_en_US.properties
3.xxx模块_message_zh_CN.properties

USER_OR_PASSWORD_ERROR=用户名或密码错误
2.创建配置类扫描多文件
@Configuration
public class LocalMessageConfig {
@Bean(name = "messageSource")
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
String[] strings = scanModelsForI18nFolders();
messageSource.setBasenames(strings);
messageSource.setDefaultEncoding("UTF-8");
logger.info("加载messageSource:{}", StringUtils.join(Arrays.stream(strings).map(String::toString).collect(Collectors.toList()), ","));
return messageSource;
}
public String[] scanModelsForI18nFolders() {
try {
// 通配规则 直接获取 Resources中的内容
String resourcePattern = "classpath*:i18n/*_message.properties";
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resourcePatternResolver.getResources(resourcePattern);
String[] paths = new String[resources.length];
for (int i = 0; i < resources.length; i++) {
Resource resource = resources[i];
String[] urlStrArr = resource.getURL().toString().split("/");
int index = urlStrArr.length - 1;
String moduleName = urlStrArr[index];
// 通配符加+ 模块名 + /国际化数据目录
paths[i] = "classpath:i18n/" + moduleName.substring(0, moduleName.length() - 11);
}
return paths;
} catch (Exception e) {
}
return null;
}
}
3.创建工具类,解析语种请求
public class LocaleMessageUtils {
public static String getMessage(String code) {
MessageSource messageSource = SpringContextUtil.getBean("messageSource");
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(code, null, locale);
}
}
4.创建异常枚举枚举
public enum BaseExceptionEnum {
USERNAME_OR_PASSWORD_ERROR(4001, "USER_OR_PASSWORD_ERROR");
BaseExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
private Integer code;
private String message;
@Override
public Integer getCode() {
return code;
}
@Override
public String getMessage() {
// 根据编码翻译
return LocaleMessageUtils.getMessage(message);
}
}
5.测试
中文测试
在postman中添加语种请求头

测试结果

英文测试
在postman中添加语种请求头

测试结果

本文详细展示了如何在SpringBoot应用中管理多语言文件(如.properties),配置类扫描并加载资源,利用工具方法获取用户指定语言的消息,以及创建基于异常枚举的错误码和国际化消息。
9528

被折叠的 条评论
为什么被折叠?



