2011-12-01 11 views
7

Voglio risolvere le impostazioni locali dell'utente prima rilevando un cookie e, se non ce n'è uno, dall'intestazione del linguaggio accept. La primavera sembra voler solo accettare un singolo LocaleResolver.Chaining Spring CookieLocaleResolver e AcceptHeaderLocaleResolver

È interessante notare che la documentazione molla per CookieLocaleResolver stato

implementazione

LocaleResolver che utilizza un cookie inviato indietro all'utente in caso di un'impostazione personalizzata, con un ripiego al default locale specificato o la richiesta di accettare -header locale.

ma questo in realtà non sembra essere il caso; test mostra che non funziona e una rapida occhiata alla sorgente mostra che ottiene l'impostazione predefinita solo se non ci sono cookie.

È l'unica soluzione per scrivere la mia implementazione LocaleResolver?

risposta

9

Sembra che CookieLocaleResolver faccia esattamente ciò che si desidera purché non sia impostato su defaultLocale.

Se volete qualcosa di diverso (ad esempio, il fallback a defaultLocale quando è stato trovato né biscotto né Accept intestazione), è possibile ignorare la sua determineDefaultLocale() conseguenza.

+0

Grazie, questo sembra funzionare. Forse ho appena frainteso i documenti, potrebbe essere un po 'più chiaro. – Qwerky

3

Esempio biscotto locale resolver che fallback primo a Accept-Language intestazione e solo allora a 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(); 
    } 
}