¿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.

Entradas relacionadas:

  1. Cómo obtener distribuciones Linux totalmente libres
  2. Traducir BuddyPress al español
  3. ¿Y tú cómo pones las llaves cuando programas?
  4. Cómo instalar programas en Linux
  5. Cómo ejecutar programas implementados en .NET en Linux con Mono

Acerca de F. Javier Carazo Gil

Casi Ingeniero Informático, co-fundador y administrador de Linux Hispano, co-fundador de Red de Autores y Geometrio, puedes saber más sobre mí, mi vida laboral, mis libros, mis artículos y mi día a día en @fjcarazo y en mi perfil público de LinkedIn.
  • Pingback: Bitacoras.com

  • http://ushcompu.com.ar ushcompu

    En PHP no existe la función __() :/

  • http://www.jcarazo.com carazo

    @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’.

  • http://ahornero.com ahornero

    ¿Y al final cómo se hace en PHP? ¿Nos esperamos a la segunda entrega?

  • http://www.jcarazo.com carazo

    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.

  • javier parra

    Muchas gracias por la aportacion carazo.

    salu2

  • Pingback: ¿Cómo traducir programas libres? Fichero .po, .mo y .pot (Parte II) | Linux Hispano

  • http://ushcompu.com.ar ushcompu

    PHP != WordPress, __() no existe en PHP :/

  • Pingback: ¿Cómo traducir programas libres? Uso en PHP (Parte III) | Linux Hispano

  • Pingback: ¿Cómo traducir programas libres? Uso en PHP (Parte III) | Superlinux

  • Pingback: Vocabulario WordPress en español | Linux Hispano