¿Cómo traducir programas libres? Uso en PHP (Parte III)
Si ya hemos hablado en líneas generales del tema y hemos comentado cómo hacer uso de los ficheros .po, .mo y .pot, ahora nos toca el turno de llevar a la práctica todo esto. Suponemos que tenemos ya nuestros ficheros .PO y .MO creados. Si queréis practicar, podéis usar los paquetes de lenguaje de cualquier aplicación libre, por ejemplo, los de la versión española de WordPress. Empecemos paso a paso.
Marcar las cadenas a traducir
En lugar de usar directamente:
print “<p>Cadena a traducir</p>\n”;
Deberemos hacer uso de la función gettext:
print “<p>”.gettext(“Cadena a traducir”).”</p>\n”;
O de su alias (mucho más funcional):
print “<p>”._(“Cadena a traducir”).”</p>\n”;
Códigos de idioma – Relación con el fichero .MO
Con las cadenas ya marcadas, sólo nos queda indicarle a PHP dos cosas:
- Qué idioma es el que el usuario está visualizando
- Dónde están los ficheros de dichos idiomas
Haremos uso de las siguientes funciones:
- putenv: para introducir una variable de entorno
- selocale: para establecer la configuración regional
- binddomain: para hacer la referencia a la ruta del dominio (dónde está el fichero .MO)
- textdomain: establece el dominio
Supongamos que tenemos un fichero de inglés británico (código en_GB, si queréis saber más sobre códigos de idioma y códigos de país leed los enlaces que os dejo, ambos se establecen por la norma ISO 639), un fichero “mensajes.po” con las traducciones situado en la ruta “locale/en_GB/LC_MESSAGES”, podremos hacer directamente:
$idioma=”en_GB”;
putenv(“LC_ALL=$idioma”);
setlocale(LC_ALL, $idioma);
bindtextdomain(“mensajes”, “./locale”);
textdomain(“mensajes”);
Las cadenas marcadas, se traducirán automáticamente al inglés si existe una traducción para ellas definida en el fichero .MO. Sólo nos quedaría establecer un mecanismo para posibilitar la traducción a los diferentes idiomas en función de la variable $idioma.
Entregas anteriores: