En los últimos días he estado buscando información sobre como cambiar el idioma por defecto de una aplicación en Grails y como no he encontrado demasiado y la que hay, la he visto un tanto enrevesado, me he decidido a escribir este artículo.
Como ya sabéis, cuando creamos una aplicación en Grails, por defecto se crean una serie de archivos de propiedades en el directorio grails-app/i18n. Pues bien, por defecto, nuestra aplicación cogerá aquel idioma que tengamos configurado por defecto en nuestro navegador como idioma preferido.
Si queremos modificar este comportamiento que hace que dependa de nuestro navegador el idioma en el que vemos la aplicación, debemos configurar el archivo grails-app/conf/spring/resources.groovy para establecer el idioma y el país en el que queremos ver nuestra aplicación. El siguiente código dejaría nuestra aplicación lista para ser vista por defecto en español.
"es","ES"
Pero, ¿qué pasa si nuestra aplicación está en varios idiomas y queremos que sea el propio usuario quien tenga la posibilidad de cambiar de idioma?
Aquí supongo que habrán muchas posibles soluciones, pero una posible implementación de la misma podría ser crear un método en un controlador que se encargue de cambiar este idioma por defecto. Para hacer esto, en primer lugar debemos mostrarle al usuario un par de enlaces para que sea capaz de seleccionar en que idioma accede a la aplicación.
<g:link controller="public" action="changeLocale" params="[lang:'en', country:'US']">English</g:link>
Con estos enlaces, necesitaría una controlador de la clase Public y un método en él llamado changeLocale() que se encargue de la gestión del idioma por defecto de nuestra aplicación.
}
}
Con esto ya tendríamos nuestra aplicación accesible en varios idiomas.
Actualización: si seguimos los pasos indicados en el artículo, se modificará el lenguaje por defecto de la JVM de nuestro servidor. Si simplemente queremos modificar el lenguaje de la aplicación en cuestión, debemos hacer uso de la explicación existente en la documentación oficial de Grails y que consiste en pasar el parámetro lang a través de la url indicando queremos seleccionar en cada momento.
La confusión venía, porque al intentar poner la aplicación en inglés utilizando el parámetro lang=en, la aplicación quedaba en el idioma anterior y no se modificaba el idioma. Esto es debido a que los ficheros de propiedades se llaman de la siguiente forma: – message.properties: para el inglés – message_es.properties: para el español
_ message_de.properties: para el alemán
Esto provoca que si queremos poner la aplicación en inglés, o bien modificamos el nombre de message.properties por message_en.properties y le pasamos el parámetro lang=en o bien dejamos el archivo message.properties sin modificar y le pasamos el parámetro lang vacio con lang=
¿Conoces otra forma de cambiar el idioma por defecto de una aplicación en Grails?
your_ip_is_blacklisted_by sbl.spamhaus.org.
# sirdsoriano, May 13, 12:47 AM:
En el primer caso es correcto, pero en el segundo lo estas haciendo por defecto para toda la JVM. Has visto esto en la doc? http://grails.org/doc/latest/guide/10.%20Internationalization.html#10.2%20Changing%20Locales No te funciona?
# Fran García, May 13, 11:14 AM:
Gracias por tu comentario. Probé el sistema que indican en la web y la verdad es que sólo me funcionaba en determinadas ocasiones, pero es cierto, que si funciona correctamente. Simplemente pasando en cualquier método de cualquier controlador el parámetro lang, nuestra aplicación estará disponible en el idioma seleccionado.
Repito, gracias por tu comentario.