jueves, 1 de agosto de 2013

Sobre gettext y traducciones en puppy-es PARTE 1


Este pequeño ejercicio trata de alguna manera explicar de una forma empírica o primitiva pero tratando de que sea lo mas claro posible como agregar esas partes a un codigo que hacen que sea posible que un script pueda ser traducido en cualquier idioma.
Este documento no es un tutorial completo solo una minima explicacion de como poder traducir scripts usando gettext y las herramientas conocidas de traducción como momanager y poedit.
Quiero agradecer a vicmz desarrollador de puppylinux por señalarme por donde empezar en esta tarea de traducción.
Bueno comencemos  por ver un ejemplo de script escrito en bash, vamos a empezar por uno corto y facil.


#!/bin/bash
#Written by PANZERKOPF
#100215 hacked by BK
#101207 hacked by EW

# this is a Xdialog frontend for the xgamma program - setting colour calibration for the screen
# It is using the 3 RGB channels 
# xgamma uses a logharithmic scale for the gamma values (0.1 - darkest, 1.0 - default, 10.0 - brightest) -> Y Values
# The GUI uses a linear scale (going from -100 - darkest, 0.0 - default, +100 - brightest) -> X Values
# The transformation is given by Y=10^(X/100)
# the calculation has to be performed with bc,
# to use decimal values in the exponent the equation must be rewritten Y = exp ( X/100 * log (10))
# or, setting the precision to 3 decimal points using bc command: Y=$(echo "e( "$X"/100 * l(10))" | bc -l)
# The reverse transformation is XRED=$(echo "scale:0; 100 * l($YRED) / l(10)" | bc -l)


TITLE="Monitor Gamma calibration"
BACKTITLE='Set percentage value for each colour,\nor adjust equally if only want to adjust\nbrightness of screen' 

Como pueden ver basicamente las primeras lineas y que estan comentadas (las lineas que tienen el simbolo #) son lineas informativas sobre quien escribio el codigo y sucesivos cambios realizados, comentarios, ajustes al codigo, correccion de bugs etc. Luego vemos como se titula la interface "Monitor Gamma calibration" esto es lo que trataremos de traducir primeramente.

Ahora veremos el script pero en versiones siguientes.

#!/bin/bash

#Written by PANZERKOPF
#100215 hacked by BK
#101207 hacked by EW
#121019 BK: fixed. internationalized.
#121022 L18L: complete the internationalization.

#101207 EW:
# this is a Xdialog frontend for the xgamma program - setting colour calibration for the screen
# It is using the 3 RGB channels 
# xgamma uses a logharithmic scale for the gamma values (0.1 - darkest, 1.0 - default, 10.0 - brightest) -> Y Values
# The GUI uses a linear scale (going from -100 - darkest, 0.0 - default, +100 - brightest) -> X Values
# The transformation is given by Y=10^(X/100)
# the calculation has to be performed with bc, 
# to use decimal values in the exponent the equation must be rewritten Y = exp ( X/100 * log (10))
# or, setting the precision to 3 decimal points using bc command: Y=$(echo "e( "$X"/100 * l(10))" | bc -l)
# The reverse transformation is XRED=$(echo "scale:0; 100 * l($YRED) / l(10)" | bc -l)


export TEXTDOMAIN=xgamma-gui
export OUTPUT_CHARSET=UTF-8

TITLE="$(gettext 'Monitor Gamma calibration')"
BACKTITLE="$(gettext 'Set value for each colour, or adjust equally if only want to adjust brightness of screen.
The spinboxes are adjustable in the range -100 to +100, where -100 is darkest, 0 is default, and +100 is brightest.')'" 

Ven como va tomando forma veamos algunas lineas solo para referencia, si revisamos la segunda version del script vemos las fechas por ejemplo #121019 BK: fixed. internationalized. el 19 de octubre del 2012 barryk creador de puppylinux empezo a internacionalizar el script luego #121022 L18L: complete the internationalization. el usuario L18L completo la internacionalizacion el 22 de octubre del 2012 agregandole esa reseña a su trabajo asi que si tú vas a hacer una modificacion al script tambien debes agregar que fuiste tú quien modifico el codigo.

ahora veamos esto.


export TEXTDOMAIN=xgamma-gui
export OUTPUT_CHARSET=UTF-8 

donde 

textdomain -- Establece el dominio actual 
Esta función establece el dominio en el que se realizarán las busquedas provocadas por las llamadas a gettext(), normalmente el nombre dado a la aplicación. Se devuelve el dominio anterior. Puede llamar a la función sin parámetros para obtener el dominio actual sin necesidad de cambiarlo. 

UTF-8 -- (8-bit Unicode Transformation Format) es un formato de codificación de caracteres Unicode e ISO 10646 utilizando símbolos de longitud variable. UTF-8 fue creado por Robert C. Pike y Kenneth L. Thompson. Está definido como estándar por la RFC 3629 de la Internet Engineering Task Force (IETF).1 Actualmente es una de las tres posibilidades de codificación reconocidas por Unicode y lenguajes web, o cuatro en ISO 10646

Esto solo es teoria pero son lineas necesarias de agregar para que gettext funcione en el script, pero sigamos escribiendo un poco mas de teoria, los terminos i18n y l10n sabes que significan?.

i18n es abreviatura de la palabra internationalization, se deriva de la primera letra que es la i + 18 caracteres que tiene la palabra + la n que es la ultima letra.

l10n al igual que i18n es una abreviatura de la palabra localization, la primera letra que es la l + 10 caracteres que tiene la palabra + la n que es la ultima letra.

La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería en el código. La localización es el proceso de adaptar el software para una región específica mediante la adición de componentes específicos de un locale y la traducción de los textos, por lo que también se le puede denominar regionalización. 

Asi que si vas a agregar gettext al script una forma de especificar que tú lo has hecho seria asi

#300713 i18n nilsonmorales

si el scritpt ya tiene gettext y vas a traducir al español entonces modificas 

#300713 l10n nilsonmorales

Bien continuemos que aun falta mucho, ya sabemos como editar el script para hacer saber que lo internacionalizamos o localizamos tambien sabemos que agregarle para que gettext haga lo suyo.
Ahora tenemos que agregarle todas las cadenas en las palabras y oraciones que queremos traducir, una regla muy clara es: si agregas mal gettext el script deja de funcionar asi de simple, asi que lo mejor es estar concentrados en eso y revisar muy bien donde agregamos esas lineas.


 $(gettext 'ORACION O PALABRA')

Esta es la base principal de como debe ir agregandose gettext a las oraciones y palabras ahora les mostrare ejemplos para agregarlos en determinada variable de un script para que tomen como referencia y se les haga mas facil la tarea.

TITLE
TITLE="$(gettext 'Monitor Gamma calibration')"

LABEL
<label>$(gettext 'ALSA Wizard')</label>

FRAME
<frame $(gettext 'TWO: Play test sound')>

TEST-LABEL
<text><label>$(gettext 'Choose the icon-set for desktop and menu')</label></text>

WINDOW-TITLE
<window title=\"$(gettext 'Puppy Icon Switcher')\" icon-name=\"gtk-convert\">

XDIALOG-TITLE
Xdialog --title " " --msgbox "$(gettext 'Temporary folder not found!')" 0 0

ECHO
echo "  $(gettext 'Loaded modules:')${ALLMODS}" >> /tmp/report-video

XDIGALOG-YESNO
Xdialog --yesno "$(gettext 'Save current configuration?')'" 0 0

DIAGLOG --TITLE
dialog --title "$(gettext 'Xorg Video Wizard')"

BUTTON-LABEL
<button><label>$(gettext 'Quit')</label></button>

Estos son los ejemplo mas comunes en programación en bash, en este momento ya se tendria una idea un poco mas clara de como internacionalizar un script.

Para no hacer tan largo el ejercicio voy a continuar en la proxima entrada ya que faltan mas detalles.


FUENTES
-Scripts en /usr/share/bin y /usr/share/sbin en cualquier iso de Puppylinux

-http://www.gsi.dit.upm.es/~anieto/docs/php_manual_es/function.textdomain.html

-http://es.wikipedia.org/wiki/UTF-8

-http://techtastico.com/post/que-es-i18n-y-l10n/

Este documento esta sujeto a criticas y correcciones, eres libre de opinar...

No hay comentarios:

Publicar un comentario