El proceso de internacionalización de un proyecto de software administrado con Automake y Autoconf es relativamente sencillo. A continuación voy a detallar los pasos para preparar un proyecto de software para traducirlo al español.

Para convertir nuestro proyecto necesitaremos instalar el paquete gettext-devel. Luego de hacerlo comenzaremos ejecutando:

gettextize --intl --copy

Después en el directorio po/ creado crear:

  • LINGUAS: contiene lista de idiomas de las traducciones disponibles. Como estamos creando una traducción en español agregamos “es”.
  • Makevars: Crearlo de Makevars.template. Se debe agregar –from-code=UTF-8 en la opción XGETTEXT_OPTIONS si es que los archivos están en UTF-8. Es conveniente que también edites COPYRIGHT_HOLDER y MSGID_BUGS_ADDRESS.
  • POTFILES.in: contiene la lista de archivos fuente que contienen cadenas traducibles. Agregar con ruta relativa a la raíz del proyecto.

Conviene revisar configure.in ya que la herramienta gettextize incluye algunas instrucciones en él.

Luego ejecutar aclocal -I m4 && autoheader && automake && autoconf para recrear los Makefile.am y Makefile.in y ejecutar ./configure para crear los Makefile.

Finalmente creamos los archivos con las traducciones ejecutando primero

make PACKAGE.pot-update

para crear el archivo de plantilla (reemplazar PACKAGE con el nombre del proyecto) y luego

msginit -o es.po

para crear el archivo es.po, que contendrá las cadenas traducidas al español.

Las cadenas a traducir deben estar marcadas en el código fuente usando las macros _() y N_(). Estas se pueden definir como:

#ifdef ENABLE_NLS
# include
# define _(s) gettext (s)
# define N_(s) (s)
#else
# define _(s) (s)
# define N_(s) (s)
#endif

Un ejemplo de una cadena marcada para traducción sería:

printf (_("There are %d objets in %s\n"), n, text);

Si se quiere regenerar el archivo es.po podemos ejecutar dentro del directorio po/:

make es.po

Finalmente, para comenzar a traducir el proyecto, editamos este último archivo con aplicaciones como gtranslator, emacs o vim.

Anuncios