Saltar a contenido

Traduccion desde script

En esta modalidad las traducciones se introducen directamente en la rutina de Python. Esta manera no es la más habitual

Crear traducción

Las traducciones se pueden crear adentro de la rutina de Python con la función add_tranlation() en forma de pares campo - valor, ambos en formato string-

Por ejemplo, para crear un campo llamado hi y asignarle una traducción al español se hace:

Crear traducción
i18n.add_translation('hi','hola')

Para cada par campo-valor se puede asignar una abreviación de lenguaje con ayuda del campo locale, de modo de permitir soporte simultáneo a múltiples idiomas:

Crear traduccion - varios idiomas
i18n.add_translation('hi','good morning', locale='en')   # 'en' : inglés (english) 
i18n.add_translation('hi','buenos días', locale='es')    # 'es' : español

Las etiquetas es y en son etiquetas de idioma definidas por el desarrollador. Éstas no vienen predefinidas por el paquete, aunque convencionalmente se usan las abreviaciones en inglés de los lenguajes.

Elegir lenguajes - Set y Fallback

El lenguaje prioritario se establece con la función set():

Lenguaje preferido - set
# Lenguaje preferido
i18n.set('locale', 'es')   # español
en tanto que la opción alternativa se establece con la función fallback():

Lenguaje de respaldo - fallback
# alternativa : 'fallback'
i18n.set('fallback', 'en')  # inglés

Esto permite completar los campos para los cuales no existan traducciones en el lenguaje preestablecido. Como alternativa habitualmente se elige el inglés.

Leer traducción

La lectura de las traducciones se realizan con la función t():

Leer traducción
nombre_campo = 'hi'
traducido = i18n.t(nombre_campo)
print(traducido)

donde la traducción elegida para el campo será la asignada al lenguaje predeterminado (set) o el de respaldo (fallback). Si no hay ninguna traducción preasiganada para el campo entonces se devuelve el mismo campo como texto.

Placeholders

Se pueden implementar parámetros (campos variables) dentro de las traducciones. Éstos son llamados placeholders o marcadores:

placeholders - formato
# campo 'name' variable 
i18n.add_translation('hi', 'Hola %{name} !')

Los parámetros variables se asignan como argumento para la función t() en el momento de traducir:

placeholders - asignación
traducido = i18n.t('hi', name='Bob')    # 'Hola Bob!'

Pluralización

El placeholder, si éste tiene valor numérico, puede usarse para elegir entre varias traducciones posibles. El valor numérico se pasa con la propiedad count. Las opciones de traducción se enmarcan entre llaves y hay cuatro opciones:

Opcion Valor
zero 0
one 1
few 2 a 5
many 6 o mayor

Las traducciones para este caso se guardan como un diccionario, donde estas opciones son las claves.

Por ejemplo, supóngase un cliente de correos electrónicos:

Pluralización - formato
i18n.add_translation('mails', {
    'zero': 'No tienes ningún correo nuevo.',
    'one': 'Tienes un nuevo correo.',
    'few': 'Sólo tienes %{count} correos nuevos.',
    'many': 'Tienes %{count} correos nuevos.'
})
La lectura de la traducción se hace asignándole el valor a la propiedad count:

Pluralización - uso
print( i18n.t('mails', count=numero_entrada) ) 

Entonces las traducciones se adaptan al número ingresado:

Lectura - count=0
print( i18n.t('mails', count=0) )  # caso 'zero'(0)
Traducción leída
No tienes ningún correo nuevo.

Lectura - count=1
print( i18n.t('mails', count=1) )  # caso 'one' (1)
Traducción leída
Tienes un nuevo correo.

Lectura - count=5
print( i18n.t('mails', count=5) )  # caso 'few' (2 a 5)
Traducción leída
Sólo tienes 5 correos nuevos.

Lectura - count=6
print( i18n.t('mails', count=6) )  # caso 'many' (6 o mayor)
Traducción leída
Tienes 6 correos nuevos.