实习期 老板让我改项目的国际化
要求:
- 默认根据浏览器Accept-Language中的语言信息判断选择语言版本;
- 提供切换语言按钮URL?lang=zh_CN,切换后将语言信息存入cookie;
- 若客户浏览器中存在语言cookie则优先使用coolie选择显示语言;
实现:
- 若无cookie或URL切换请求,CookieLocaleResolver类中
resolveLocale(HttpServletRequest request)
方法会自动判断浏览器Accept-Language
; - CookieLocaleResolver设置的cookie默认有效期为会话结束,所以我们需要重构,设置cookie的有效期:
public class MyCookieLocaleResolver extends CookieLocaleResolver {
//重写构造方法,改变cookie信息
public MyCookieLocaleResolver(){
this.setCookieName("locale");
//cookie有效期30天
this.setCookieMaxAge(30*24*60*60);
System.out.println("设置cookie参数成功!");
}
}
LocaleChangeInterceptor
会结合当前使用的LocaleResolver
,使用其setLocale()方法,因此我们可以通过LocaleChangeInterceptor
结合URL请求改变及设置cookie中的locale信息;
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver(){
//添加自己重写的MyCookieLocaleResolver
return new MyCookieLocaleResolver();
}
//配置拦截器获取URL中的key=“lang” (?lang=zh_CN)
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
//注册拦截器到容器中
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
至此完成,若有不对之处,望路过的大神指正~