Linux y programación
Noticias, dudas y soluciones de Linux y programación

El tiempo en Badajoz

Sugerencias:

Esta bitácora fue creada por linuxcpp el día 24-09-06. Se han publicado 101 historias y 131 comentarios.


Foto del creador
Nombre: linuxcpp
Descripción: José Ramón Rubio
Localidad: Caceres
E-mail

Llamame con Gizmo

¿Qué le parece la nueva distribución gnuLinex 2006?
Excelente
Muy buena
Buena
Normal
Mala
Pésima

Ver resultados
Ver comentarios

    <<  Agosto 2008  >>
    DomLunMarMieJueVieSab
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      

Powered by eXtreblog  Use OpenOffice.org Add to Technorati Favorites  Bitacoras.com


Free Software Top
gnuLinEx 2006: de SARGE A ETCH: Última actualización: 12/01/2008

Traducción de paquetes
Autor: linuxcpp _ URL _ Tb () _ Categorias: LINUX- Utilidades

TRADUCCIÓN  
 
  La traducción de programas es una tarea pesada pero interesante. Es indudable que existe una relación directa entre el número de idiomas que ofrece un software con el número de usuarios que acceden al mismo.

  A continuación vamos a indicar una nociones básicas acerca de la traducción del software.

  La herramienta que usaremos será gettext. Se trata de un paquete que podemos descargar fácilmente: apt-get install gettext
  Para poder traducir un programa con esta herramienta debemos tener accesible el código fuente del programa en cuestión. El código fuente además debe estar preparado para usar esta herramienta, me refiero a que en el propio código fuente debe incluirse la librería <gettext.h>. Si el código fuente es C deberemos incluir las sentencias:

  bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
  bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
  textdomain(GETTEXT_PACKAGE);

  Donde las MAYUSCULAS deben haber sido definidas en algún include.
  Se puede complicar poniéndolo para que se haga con el ./configure pero lo más habitual es no complicarse y definirlo:
  Ej: MAKEFILE: PACKAGE = xwine

  En otros lenguajes de programación también se pueden usar las opciones de gettext, pero las sentencias para activarlas serán algo distintas.
  Además en el código fuente se deberán marcar aquellas cadenas de texto que vayamos a dar la posibilidad de traducir; para ello en vez de poner una cadena de tipo "Hola", deberíamos ponerla de forma: _("Hola")

  Lo que debemos hacer es extraer del código fuente aquellas cadenas de texto que se pueden traducir (las que hayan sido marcadas). El comando que usaremos es el siguiente, el cual crea un fichero con nombre: nombre_programa.pot que contendra dichas cadenas de texto. El comando a usar es:
  xgettext
 
  Cuando nos descargamos el código fuente de un paquete con el comando apt-get source nos encontraremos en muchas ocasiones con una carpeta con nombre po. En él se encuentran ficheros con extensión .po (quizás también .gmo) y posiblemente un fichero .pot. El fichero con extensión .pot es el original, con las cadenas de texto a traducir y que podríamos usar como base para comenzar una nueva traducción; y los ficheros con extensión .po contienen la traducción en distintos idiomas.

  La estructura de estos ficheros son parecidas a estas:


  #: ../data/gedit.desktop.in.in.h:1
  msgid "Edit text files"
  msgstr "Edite archivos de texto"

  Donde msgid contiene la cadena de texto original extraida del código fuente, y la cadena msgstr la traducción de la misma. Es una tarea pesada, pero si queremos traducir un programa a un nuevo idioma debemos partir de un fichero vacío (el .pot) e ir traduciendo todas las cadenas de texto que aparecen.
  Una vez hecha la traducción, y teniendo completo el nuevo fichero .po (cuyo nombre hace referencia al nuevo idioma), deberemos compilarlo generando un archivo con extensión .gmo. Para esta compilación usaremos la herramienta msgfmt:

  msgfmt es.po -o es.gmo

  Para que esta traducción tuviera efecto en nuestro programa, este fichero con extensión .gmo debe ser movido a la ruta correspondiente y con el nombre correspondiente. Por ejemplo, para el paquete gedit y con una traducción a español (es), lo primero sería cambiar el nombre del archivo con extensión .gmo a: nombre_programa.mo (gedit.mo), y deberá ser llevado a la ruta /usr/share/locale/es/LC_MESSAGES:

  cp es.gmo /usr/share/locale/es/LC_MESSAGES/gedit.mo

  Existe una variable de entorno de nombre $LANG que nos dice el idioma de nuestro sistema, y que una vez que ejecutemos cualquier aplicación intentará ver si existe una traducción para ese idioma, y de ser así se mostrará con la traducción correspondiente.
  Se puede cambiar el valor de esta variable de entorno con el comando export. Ej: export $LANG=de (a idioma alemán).
 
  Notas generales de traducción:
  - Si al traducir una palabra le pones el carácter _ delante de una letra, está letra aparecerá subrayada. Ej:

  msgid "_Dec"

  msgstr "_DecTraducido" // <-- La D apareceria subrayada

  - La aplicación kbabel (podemos descargarla haciendo apt-get install kbabel) comprueba si la traducción ha sido correcta, dudosa, etc.


  Existe un paquete llamado linguist (que podemos descargar haciendo apt-get install qt3-linguist), que permite traducir programas basados en las librerías qt. La carpeta que debemos buscar en el código fuente se llama translation, y las extensiones de los archivos a traducir son .ts
  Estos ficheros se pueden traducir manualmente desde un editor pero también se puede usar el propio programa linguist. Los archivos compilados una vez finalizada la traducción tienen extensión .qm. Para estos archivos no existe una ruta definida sino que cada aplicación tiene su propia ruta, así por ejemplo existe la ruta /usr/share/mysqlcc/translation a la cual deberemos copiar el archivo .qm creado.

  En resumen, si desde el momento de programación seguimos las directivas adecuadas, de tal forma que podamos extraer las cadenas de texto traducibles con el paquete gettext más adelante, la posibilidad de traducir el programa a numerosos idiomas será tan fácil como editar simples ficheros.

  Para cualquier duda o consulta dejen un comentario.



Comentarios (0)
MeneameMenéame Barrapunto Barrapunto Technorati Technorati Google Google Bookmarks Fresqui Fresqui Delicious del.icio.us
VOTACIÓN: Votos(Núm. votos: 3)


Escribe tu comentario


Usuario de eXtreblog (sí/no)

Nombre:

Contraseña:
?


Comentario:

Escribe el resultado de la suma:






"Linux y programación"
I would love to change the world, but they won't give me the source code