编写国际化配置文件,抽取页面需要显示的国际化消息
- 在resources文件下创建i18n文件夹(i18n含义为:internationalization,取头和尾i、n两个字母后还剩18个字符,所以叫i18n)
- - 在i18n文件中添加国际化配置文件 login.properties ,login_语言代码_国家代码,此时IDEA会自动标记这是一个国际化配置(Resource Bundle ‘login’)
- 当需要适配新的语言时可以右键->new->Add Property Files to Resource Bundle,此时只用填入语言代码和国家代码即可
- 随意选择一个国际化配置文件,选择Resource Bundle视图,添加属性
代码中使用国际化的值
SpringBoot自动配置好了管理国际化资源文件的组件
- 在配置中将国际化资源管理的组件改为i18n
spring:
messages:
basename: i18n.login
- 注入MessageSource对象,通过getMessage方法获取消息
@Resource
MessageSource messageSource;
@GetMapping("/internal")
public String getInternal(){
String tip = messageSource.getMessage("login.tip", null, Locale.ENGLISH);
return tip;
}
区域信息解析器
spring boot中使用区域信息解析器识别当前语言,默认区域信息解析器org.springframework.web.servlet.LocaleResolve。
当使用默认区域信息解析器时,通过浏览器请求头中携带的Accept-Language参数识别浏览器当前使用语言。
想要自定义实现语言切换,则可以自定义实现区域信息解析器。
/***
* 自定义实现区域信息解析器
*/
public class MyLocaleResolver implements org.springframework.web.servlet.LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
Locale locale = Locale.getDefault();
String l = httpServletRequest.getParameter("l");
if (StringUtils.isNullOrEmpty(l)){
return locale;
}
String[] split = l.split("_");
if (!StringUtils.isNullOrEmpty(l) && split.length >= 2) {
locale = new Locale(split[0], split[1]);
}else {
locale = new Locale(l);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
在MVC配置中注入自定义的区域解析器
public class MvcConfig implements WebMvcConfigurer {
@Bean
public org.springframework.web.servlet.LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
}