Categorías: Tutoriales

¿Cómo traducir programas libres? Introducción (Parte I)

Siempre que alguien comienza el desarrollo de un software, sobre todo si éste está en la nube, debe pensar en la internacionalización del mismo. Aparte de estudiar otros aspectos como los textos RTL (Right to left, de derecha a izquierda), la codificación de los caracteres, el formato de la fechas o el de los números (no es lo mismo 1.000,50€ que $ 1000.50) el aspecto más básico es proveer el software con su contenido traducido a cada idioma.

Pero, ¿cómo traducimos un programa? Tenemos tantas alternativas como se nos ocurran. Una relativamente popular pero un tanto ineficaz es mantener una variable que indique, qué idioma es el utilizado y en cada momento en el que se muestra información, hacer un condicional, como se muestra a continuación:

si(idioma == "Español")
    imprime("Hola");
si(idioma == "Inglés")
    imprime("Hello);

Sin lugar a dudas, esta opción funciona pero es verdaderamente ineficaz. La solución que se aplica de forma casi estándar en el software libre es la que se va a describir a continuación, está basada en la librería GNU para la internalización y localización, GNU gettext. Veamos cómo se implementa esta técnica en PHP.

Cadenas internacionalizadas en PHP

En PHP sólo deberemos poner delante de nuestras cadenas dos barras bajas “__” y encuadrarla dentro de unos paréntesis: __(“cadena”) para indicarle al intérprete que la cadena no es una cadena como tal, sino un identificador que deberá ser sustituido por su respectiva traducción, en función del idioma en el que estemos trabajando.

El identificador será la traducción del idioma “raíz”, que normalmente es el inglés, por lo que podemos encontrarnos, por ejemplo en muchos sistemas gestores de contenido, sentencias como la siguiente:

echo __('Comments')

Esta función es en realidad el alias de la función gettext, que consulta un mensaje en el dominio actual:

echo gettext('Comments')

La pregunta ahora es, ¿cómo sabe el intérprete dónde están las traducciones? ¿Qué mecanismos hay para acelerar el proceso de búsqueda en los ficheros que las contienen? Esa parte la explicaremos en la segunda parte de esta entrada, pero ya os adelanto que veremos los ficheros .po, .mo y .pot que seguro que habréis visto en más de una ocasión.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • @ushcompu: será la abreviatura de la llamada a una función de gettext, fíjate en este fragmento de código de un tema de WordPress: __('Comments are closed, but trackbacks'.

  • En PHP se hace en cada traducción haciendo justamente eso. Por ejemplo para hacer un printf que diga el número de comentarios tendríamos:

    printf (__('%d comentarios'), %d);

    Printf mejor que echo por el tema de meter el entero entre medias sin tener que concatenar.

    En la segunda parte aclaramos esto y hablamos de los ficheros que incluyen esta información.

Entradas recientes

DeepSeek

3 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

1 mes hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace