CookieLocaleResolver國際化(Springboot)

實習期 老闆讓我改項目的國際化

要求:

  1. 默認根據瀏覽器Accept-Language中的語言信息判斷選擇語言版本;
  2. 提供切換語言按鈕URL?lang=zh_CN,切換後將語言信息存入cookie;
  3. 若客戶瀏覽器中存在語言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());
    }
}

至此完成,若有不對之處,望路過的大神指正~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章