Internacionalización y Localización
Internacionalizar es el proceso de adaptar el software para que soporte múltiples idiomas (incluidos los formatos de fechas, textos, números, monedas, etc.)
Sirve para que los formatos de las fechas, textos, números, monedas se muestren formateados para una región en específico. Por ejemplo en idioma Inglés imprimirá el mes 06 como June pero en Español imprimirá Junio.
Localizar es el proceso de ir adaptando distintos idiomas a la aplicación.
Estos términos suelen abreviarse poniendo el número de letras entre la primer y última letra:
internationalization = i18n
localization: l10n
Un locale se compone de un código de lenguaje_código de país
El Locale tiene 2 componentes: languaje (es) y region (MX)
De acuerdo al formato anterior, el locale de México se compone como: es_MX
Por default el locale del cliente es detectado desde la cabecera Accept-Language
. Sin embargo se puede pasar el parámetro lang
como request parameter para cambiar el locale:
/book/list?lang=es
Una vez que se envía el lang
desde la url, grails cambia por automático las subsecuentes peticiones ya que guarda el lang
en una cookie.
La bandera lang
tiene mayor prioridad que el lenguaje del browser (cabecera Accept-Language
).
Busca el archivo correspondiente al código del país por ejemplo test?lang=es_MX
busca el archivo messages_es_MX.properties
, si no lo encuentra busca el archivo correspondiente al lenguaje messages_es.properties
y si no lo encuentra busca en el archivo default messages.properties
Se tienen los siguientes archivos en el proyecto:
messages.propierties
messages_es.properties
messages_es_MX.properties
Archivos elegidos de acuerdo al locale:
test?lang=es_MX
: messages_es_MX.properties
test?lang=es
: messages_es.properties
test?lang=es_ES
: messages_es.properties
test?lang=ug
: messages.properties
Atributos importantes:
code
: Recibe la llave que representa el código de mensaje
default
: Esta cadena de texto la inserta cuando no encuentra la llave en el archivo messages.properties
message
: Recibe un objeto que implementa la interfaz MessageSourceResolvable
la cual indica cómo hacer la traducción.
def locale = RequestContextUtils.getLocale(request)
http://stackoverflow.com/questions/506743/localization-and-internationalization-whats-the-difference