2012-01-10 14 views

Respuesta

19

Defina un bean LocaleResolver en su config/spring/resources.groovy para establecer la configuración regional predeterminada.

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

Esto es útil si usted no tiene que lidiar con el parámetro lang - de lo contrario sería conseguir reemplazado. Incluso a ignorar el valor lang parámetro puede ajustar la configuración regional en un Filter sobre cada solicitud:

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)     
     } 

    } 
} 

Este enfoque parece un poco repetitiva como Locale es re-establece en cada petición. Sería más elegante deshabilitar la detección de la configuración regional de los navegadores a través de una opción de configuración.

+1

Esta no es una respuesta a la pregunta anterior. ArmlessJohn solicita específicamente la posibilidad de * anular * la configuración de idioma del usuario. Esto solo establece el valor predeterminado. Lea la respuesta a la que se vinculó nuevamente. – OverZealous

+0

Gracias por el aviso: actualicé mi respuesta en consecuencia. – david

+1

CUIDADO! java.util.Locale.setDefault (DefaultLocale) va a cambiar la configuración regional predeterminada para toda la JVM, que puede ser muy malo, ya que una gran cantidad de código piensa que "i" (.toUpperCase). equals ("I") en todas las configuraciones regionales . No ... Muchas utilidades inteligentes hacen suposiciones como esa. – JesperSM

5

quitar todos los archivos messages_xx.properties y mantener sólo los archivos messages.properties. Este es el paquete de mensajes predeterminado al que el sistema siempre retrocederá si no puede encontrar el paquete de mensajes correcto.

De esta manera puede seguir utilizando mensajes (y por lo tanto mantener la opción de nacionalizar su aplicación), pero los usuarios tendrán siempre el mismo idioma.

3

El valor predeterminado LocaleResolver de Grails es SessionLocaleResolver. Si desea utilizar siempre de_DE puede cambiar esto a FixedLocaleResolver.

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

Si desea restringir a un conjunto de locales, entonces necesitará un filtro, y utilizar el método SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale).

+0

Tengo problemas con la solución "La configuración regional de la propiedad de frijol no es modificable o tiene un método de configuración no válido". ... " 'locale' no válido de propiedad de la clase bean [org.springframework.web.servlet.i18n.FixedLocaleResolver]" – Rafael

+1

Esto parece funcionar -> localResolver (FixedLocaleResolver, Locale.US) – Rafael

Cuestiones relacionadas