2011-12-01 67 views
7

我想通過檢測cookie來解析用戶的語言環境,並且如果沒有一個接受accept-language頭文件。春天似乎只想接受一個LocaleResolver鏈接Spring CookieLocaleResolver和AcceptHeaderLocaleResolver

有趣的是,春天文檔爲CookieLocaleResolver狀態

使用在自定義設置的情況下發送回用戶 一個cookie,用回退到指定的默認 區域設置或請求的接受

的LocaleResolver實施 - 首部語言環境。

但這實際上並不是這樣;測試顯示它不起作用,快速查看源代碼顯示,如果沒有cookie,它只會獲得默認值。

是我自己編寫LocaleResolver實現的唯一解決方案嗎?

回答

9

它看起來像CookieLocaleResolver做你想要的只要你沒有設置它的defaultLocale

如果你想要不同的東西(例如,退回到defaultLocale時被發現既不是餅乾也不Accept頭),可以相應地覆蓋其determineDefaultLocale()

+0

謝謝,這似乎工作。也許我只是誤解了文檔,可能會更清楚一點。 – Qwerky

3

例餅乾本地化解析器是第一回退到Accept-Language頭,然後纔到defaultLocale

public class CookieThenAcceptHeaderLocaleResolver extends CookieLocaleResolver { 

    @Override 
    protected Locale determineDefaultLocale(HttpServletRequest request) { 

     String acceptLanguage = request.getHeader("Accept-Language"); 
     if (acceptLanguage == null || acceptLanguage.trim().isEmpty()) { 
      return super.determineDefaultLocale(request); 
     } 
     return request.getLocale(); 
    } 
}