iberck
11/13/2015 - 6:08 AM

Internacionalización y Localización

Internacionalización y Localización

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

Locale

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

Locale del cliente (browser)

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

Algoritmo de búsqueda de locales

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

Ejemplos

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

tag g:messages

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.

Detectar locale del cliente (browser)

def locale = RequestContextUtils.getLocale(request)

Referencia

http://stackoverflow.com/questions/506743/localization-and-internationalization-whats-the-difference