2012-01-10 16 views

risposta

19

Definire un bean LocaleResolver nel proprio config/spring/resources.groovy per impostare le impostazioni locali predefinite.

beans = { 
    localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) { 
     defaultLocale = new Locale("de","DE") 
     java.util.Locale.setDefault(defaultLocale) 
    } 
} 

Ciò è utile se non si ha a che fare con il parametro lang - altrimenti sarebbe ottenere sovrascritto. Per ignorare anche il valore del parametro lang è possibile impostare il locale in un Filter su ogni richiesta:

import org.springframework.web.servlet.support.RequestContextUtils as RCU 
... 
def filters = { 
    all(controller:'*', action:'*') { 

     before = { 
      def locale = new Locale("sv","SV") 
      RCU.getLocaleResolver(request).setLocale(request, response, locale)     
     } 

    } 
} 

Questo approccio sembra un po 'ripetitivo come Locale è re-impostato su ogni richiesta. Sarebbe più elegante disabilitare il rilevamento delle impostazioni internazionali dei browser tramite un'opzione di configurazione.

+1

Questa non è una risposta alla domanda di cui sopra. ArmlessJohn richiede specificamente la possibilità di * scavalcare * l'impostazione della lingua dall'utente. Questo imposta solo il valore predefinito. Si prega di leggere la risposta che hai collegato di nuovo. – OverZealous

+0

Grazie per l'avviso - Ho aggiornato la mia risposta di conseguenza. – david

+1

ATTENZIONE! java.util.Locale.setDefault (defaultLocale) cambierà le impostazioni locali predefinite per l'intera JVM, il che potrebbe essere molto brutto, poiché un sacco di codice pensa che "i" .toUpperCase(). equals ("I") in tutte le versioni locali . Non ... Un sacco di utilities intelligenti fanno supposizioni del genere. – JesperSM

5

rimuovere tutti i file messages_xx.properties e conservare solo i file messages.properties. Questo è il pacchetto di messaggi predefinito a cui il sistema ricade sempre se non riesce a trovare il pacchetto di messaggi corretto.

In questo modo è ancora possibile utilizzare i messaggi (e quindi mantenere l'opzione per nazionalizzare la propria app) ma gli utenti avranno sempre la stessa lingua.

3

L'impostazione predefinita LocaleResolver di Grails è SessionLocaleResolver. Se vuoi sempre usare de_DE puoi cambiarlo in FixedLocaleResolver.

beans { 
    localeResolver(FixedLocaleResolver) { 
     locale = new Locale("de", "DE") 
    } 
} 

Se si desidera limitare a una serie di locali, allora si avrà bisogno di un filtro, e utilizzare il metodo SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale).

+0

Ho problemi con la soluzione "Locale" della proprietà Bean non è scrivibile o ha un metodo setter non valido. " ... "proprietà locale" non valida della classe bean [org.springframework.web.servlet.i18n.FixedLocaleResolver] " – Rafael

+1

Questo sembra funzionare -> localResolver (FixedLocaleResolver, Locale.US) – Rafael

Problemi correlati