首先在static文件夹下边创建一个i18n文件夹,分别创建message.properties,message_en_US.properties,message_zh_CN.properties
三个文件,分别为默认语言,英文,中文
如下图所示
假设我们现在是新增用户,定义add.ok
标识新增成功
我们写一个方法
@Autowired
private Messageutil messageutil;
@PostMapping("/addUser")
public Map addUser( @RequestBody User user){
Map<String,Object> result = new HashMap();
result.put("data",messageutil.getLocaleMessage("add.ok"));
return result;
}
/**
* 获取国际化信息工具类
*/
@Slf4j
@Component
public class Messageutil {
@Autowired
private MessageSource messageSource;
@Autowired
private HttpServletRequest request;
/**
* 根据code获取国际化信息
* @param code code
* @return
*/
public String getLocaleMessage(String code) {
return getLocaleMessage(code,null,null);
}
/**
* 根据code获取国际化信息,如果没有则使用默认提示信息
* @param code code
* @param defaultMsg 默认提示信息
* @return
*/
public String getLocaleMessage(String code, String defaultMsg) {
return getLocaleMessage(code,defaultMsg,null);
}
/**
* 根据code获取国际化信息,并且替换占位符
* @param code
* @param params
* @return
*/
public String getLocaleMessage(String code, String[] params) {
return getLocaleMessage(code,null,params);
}
/**
* 根据code获取国际化信息,没有就使用默认值,并且替换占位符
* @param code code
* @param defaultMsg 默认提示信息
* @param params 替换占位符的参数
* @return
*/
public String getLocaleMessage(String code, String defaultMsg, Object[] params) {
String language = request.getParameter("lang");
Locale locale = Objects.nonNull(language) ? new Locale(language) : Locale.getDefault();
try {
return messageSource.getMessage(code, params, locale);
} catch (Exception e) {
e.printStackTrace();
log.warn("本地化异常消息发生异常: {}, {}", code, params);
return defaultMsg;
}
}
}
国际化配置类
/**
* 配置国际化语言
*/
@Configuration
public class LocaleConfig {
/**
* 默认解析器 其中locale表示默认语言
*/
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.CHINESE);// 设置默认为中文
return localeResolver;
}
/**
* 默认拦截器 其中lang表示切换语言的参数名
*/
@Bean
public WebMvcConfigurer localeInterceptor() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor);
}
};
}
}
启动应用
请求地址 localhost:8080/addUser?lang=zh_CN
参数{ "name":"张三", "addr":"北京", "email":"123@qq.com" }
,模拟中文
localhost:8080/addUser?lang=en_US
将参数换成en_us 切换为英文
git地址:https://github.com/snail10000/i18n_study.git