En el ámbito de la computación, gettext es un sistema de internacionalización (i18n) y localización (l10n) ampliamente utilizado para desarrollar programas multilingües, especialmente en sistemas operativos basados en Unix. Una de las mayores ventajas de gettext es que permite separar completamente la fase de programación del proceso de traducción.
Historia y Evolución
A finales de la década de 1980, POSIX no ofrecía medios para localizar mensajes. Surgieron dos propuestas principales: el gettext de Uniforum en 1988 y el catgets de X/Open en 1989. Sun Microsystems implementó la primera versión de gettext en 1993.
El Proyecto GNU decidió adoptar el enfoque de "mensaje como clave", considerándolo más sencillo y amigable que otros sistemas que obligaban al desarrollador a crear identificadores únicos para cada cadena de texto. En 1995, lanzaron GNU gettext, una implementación de software libre que posteriormente fue portada a numerosos lenguajes de programación.
Funcionamiento del Sistema
Programación y Extracción
La interfaz básica de gettext es la función gettext(const char), que recibe una cadena de texto en el idioma original (generalmente inglés). Para optimizar el código y reducir el ruido visual, es común asignar esta función al alias _().
A diferencia de otros sistemas que usan IDs numéricos, gettext utiliza la propia cadena de texto como clave para buscar la traducción. Para casos donde una misma frase tenga significados distintos según el contexto, existen funciones como cgettext().
El proceso técnico comienza con la herramienta xgettext, que escanea el código fuente para generar un archivo .POT (Portable Object Template). Este archivo contiene todas las cadenas traducibles extraídas del programa.
El Proceso de Traducción
El traductor utiliza el programa msginit para crear un archivo .PO (Portable Object) a partir de la plantilla .POT. Por ejemplo, para el francés, se ejecutaría un comando para generar fr.po.
El traductor luego edita este archivo, ya sea manualmente o mediante herramientas especializadas como Poedit o Emacs. Una vez completadas las traducciones, los archivos .PO se compilan con msgfmt en archivos binarios .MO (Machine Object), que son los que finalmente se distribuyen con el software para que el sistema pueda leerlos rápidamente.
Ejecución y Configuración
En sistemas tipo Unix, el usuario define la variable de entorno LC_MESSAGES para seleccionar el idioma. El programa consultará el archivo .MO correspondiente y mostrará los textos en el idioma elegido. En variantes GNU, también se puede utilizar la variable LANGUAGE, que permite definir una lista de idiomas de respaldo separados por dos puntos.
Manejo de Formas Plurales
Gettext ofrece soporte avanzado para plurales a través de la interfaz ngettext(). Dado que las reglas de pluralización varían drásticamente entre idiomas (algunos tienen más de dos formas plurales), el archivo PO incluye metadatos en la entrada de cadena vacía que definen la regla de pluralización del idioma mediante un operador ternario estilo C.
Esto permite que el programa seleccione la traducción correcta basándose en el número de elementos, asegurando que la gramática sea correcta independientemente del idioma.

