實習期 老闆讓我改項目的國際化
要求:
- 默認根據瀏覽器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());
}
}
至此完成,若有不對之處,望路過的大神指正~