2009-10-14 29 views
21

¿Cómo puedo cambiar la configuración regional actual?Grails cómo cambiar la configuración regional actual

  • traté de poner controller/action?lang=de pero mi local sigue siendo en_US
  • Traté de sustituir el valor de utilizar este trozo de código:

    def key = "org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER" 
    def localeResolver = request.getAttribute(key) 
    localeResolver.setLocale(request, response, new Locale("de","DE")) 
    

Nada cambió.

  • Me trataron de anular el valor con este pedazo de código:

    import org.springframework.web.servlet.support.RequestContextUtils as RCU; 
    RCU.getLocaleResolver(request).setLocale(request, response, new Locale("de","DE")) 
    

Y ... no pasó nada. todavía tengo mi configuración regional establecida en en_US.

¿Alguna idea de cambiar la ubicación?

Respuesta

25

De acuerdo con el capítulo 10. Internationalization de la documentación Grails, Griales apoya i18n fuera de la caja y que de hecho debe ser capaz de cambiar la configuración regional mediante el lang parámetro:

Por defecto, la configuración regional del usuario se detecta del encabezado entrante Accept-Language . Sin embargo, puede proporcionar a los usuarios la capacidad para cambiar las localizaciones simplemente pasando un parámetro llamado lang a Grails como un parámetro de la petición:

/book/list?lang=de 

Griales cambiará automáticamente la configuración regional de usuario y almacenarlo en una cookie por lo que las solicitudes posteriores tendrán el nuevo encabezado .

Pero a veces es posible que desee preajustar el idioma predeterminado porque no todas sus aplicaciones estarán en inglés. Para ello, todo lo que tiene que hacer es fijar su localeResolver en el archivo de configuración resources.groovy primavera como se muestra a continuación:

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

Ahora, sin más detalles, no puedo decir por qué utilizar el parámetro no es lang trabajando en tu caso Por si acaso, ¿cómo sabes que la configuración regional todavía está en_US ?.

+0

Gracias por su respuesta. Probé la solución para cambiar el valor predeterminado de Locale, pero aún así obtengo una configuración regional en_US. Buena pregunta para recuperar mi configuración regional actual. Uso 'request.locale'. También puedo ver que Grails sigue leyendo el mensaje del paquete predeterminado y no la versión 'de'. Gracias por cualquier pista! –

+0

Solo quería asegurarme de que su proceso de validación estaba bien y es :) Pero debo decir que esto es realmente extraño. ¿Puedes decir si el encabezado 'Accept-Language' está configurado? ¿Qué versión de los griales estás usando? –

+0

Sí, es extraño la palabra ... Estoy usando Grails 1.1. Acabo de verificar el encabezado de la solicitud http y puedo ver: 'Accept-Language: en-us, en; q = 0.5' –

6

¿Intenta cambiar la configuración regional en la URL raíz de la aplicación (por ejemplo, http://localhost:8080/myapp/?lang=de)?

En la instalación básica de Grails, intentar cambiar la configuración regional en la URL raíz de la aplicación no funciona. Grails cambia la configuración regional en localChangeInterceptor a la que se llama antes de llamar a todos los controladores. Cuando accede a la URL raíz de la aplicación, no se llama a ningún controlador, como se puede ver en UrlMappings por defecto.

Es por eso que cambiar la configuración regional en la URL raíz de la aplicación no funciona. Si intentas cambiar la URL en algún controlador, funciona.

La configuración regional actual se almacena con la clave org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME en la sesión http. Puedes verificarlo allí.

La solución correcta es asignar url raíz a algún controlador en UrlMappings.

+0

Gracias por su respuesta. Pero sí, estaba intentando cambiar la configuración regional en uno de mis controladores y no funcionó. Eso fue realmente extraño porque la documentación describía el mismo comportamiento que el que está diciendo, pero mi configuración regional no cambiaba ... así que construyo mi propia función de internacionalización usando una variable de sesión para almacenar la configuración regional actual. –

5

Esto se problably demasiado tarde, pero para referencia, hago esto en mi índice de controlador de la página:

session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE'] = new Locale("es", "PR") 
5

Por lo que yo entiendo la forma en que está comprobando el "request.locale" locale está mal, da la configuración regional del navegador, no la configuración regional de la aplicación de grails.

Debe usar "LocaleContextHolder.locale".

En 2.0.3 cambia la configuración regional simplemente pasando el parámetro lang=someLocale.

+1

Gracias por su explicación, eso tiene sentido. –

1

Tuve un problema similar, y fue porque un espacio. Tuve:

[space]messages_de.properties lugar messages_de.properties

0

tuve un problema con esto un tiempo atrás cuando proxy-ing a través de una versión anterior de Apache2.2 y el uso de los griales (2.3.9) archivo de la guerra. He tenido mejor suerte usando mod_proxy_html (3.1)/Apache 2.4. Tal vez versiones más avanzadas de Grails solucionen esto.

Cuestiones relacionadas