Skip to main content

Traducir e internacionalizar Software – Cómo usar Gettext

Importante: Éste tutorial trata solamente de extraer los textos de un programa y no de explicar todo el proceso de compilación, prueba y las opciones que hay para usar con Gettext. Para esto existe la documentación oficial de Gettext.

Para poder internacionalizar tu software, necesitas:

  • Linux: Más fácil y la mayoría de las distribuciones ya tiene los programas requeridos para esta tarea. Si todavía no tienes Linux, recomiendo Lubuntu (ya tiene Gettext y GCC y es muy liviano). Para ver una lista de las mejores distribuciones Linux visita nuestro artículo enlazado al final de éste tutorial.
  • GCC: Para compilar los programas C, C++, etc…
  • Gettext: Para extraer textos a ser traducidos del código fuente del programa.
  • Poedit: Para editar las traducciones. Poedit es un programa opcional pero recomendable para una edición más fácil y rápida de las traducciones.

Puedes instalar los programas con el comando en la terminal de Linux:

sudo su

(Debes ingresar la contraseña del administardor) y después:

apt-get install gcc & apt-get install gettext & apt-get install poedit

Vamos a escribir primero un programa “Hello World”:

#include<stdio.h>
int main()
{
printf("Hello Worldn");
return 0;
}

Ahora, para internacionalizar el programa con gettext, necesitamos agregar algunas cosas:

#include<libintl.h>
#include<locale.h>
#include<stdio.h>
#define _(String) gettext (String)
int main()
{
    setlocale(LC_ALL,"");
    bindtextdomain("helloworld","");
    textdomain("helloworld");
    printf(_("Hello Worldn"));
    return 0;
}

Qué cambios se hicieron?

Primero debemos importar la librería de gettext usando #include<locale.h> y #include<stdio.h>.

Después de importar esto, necesitamos definir que los textos en ‘_()’ son lo mismo que llamar directamente la función ‘gettext()’ – es sólo para que sea más corto.

Ahora necesitamos poner este código al principio de la función main():

setlocale(LC_ALL,"");
bindtextdomain("helloworld","");
textdomain("helloworld");

Y por ultimo debemos encerrar cada texto que se puede mostrar en la pantalla como:

_(“Texto”)

Esos fueron todos los cambios para internacionalizar el programa. Los textos tipo _(“Texto”) son reemplazados por la librería de gettext con las traducciones. Si una frase no tiene traducción, se usará el texto predeterminado que está dentro de _(“Texto”).

¿Cómo extraer los textos del código fuente?

Ya podemos extraer los textos para ser  traducidos (los identificados como ‘_(TEXTO)’) con el siguiente comando:

xgettext -d helloworld -o helloworld.pot -k_ -s helloworld.c

Después de ejecutar el comando anterior, se generará un archivo llamado helloworld.pot el cual puedes copiar y renombrar a helloworld.po para después traducir los textos en helloworld.po. Helloworld.pot se parecerá a:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSIONn"
"Report-Msgid-Bugs-To: n"
"POT-Creation-Date: 2013-11-08 12:00+0530n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONEn"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>n"
"Language-Team: LANGUAGE <LL@li.org>n"
"MIME-Version: 1.0n"
"Content-Type: text/plain; charset=CHARSETn"
"Content-Transfer-Encoding: 8bitn"

#: helloworld.c:13
#, c-format
msgid "Hello Worldn"
msgstr ""

Ahora puedes traducir el texto dentro de msgid al lenguaje que quieras en msgstr.

Enlaces para más información:

Jens Wagner

Fundador de Fosforito.Net y aficionado de las tecnologías de información, del viajar y cocinar. Trabaja en la IT y mantiene éste blog actualizado desde 2012.

2 comentarios en “Traducir e internacionalizar Software – Cómo usar Gettext”

  1. He estado trabajando con esta herramienta de traducción gettext: https://poeditor.com/ y lo que realmente hace un gran trabajo. Soporta un gran número de traductores en el mismo proyecto, trabajando en diferentes idiomas. Hay también un montón de características que facilitan el trabajo. Se lo recomiendo.

  2. Hola Maris y gracias por tu comentario!
    Realmente es una excelente herramienta. Yo también la uso para traducir software.
    Saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.