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:
Haremos uso de las siguientes funciones:
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:
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.
Ver comentarios
Esos print duelen... en PHP se usa echo (print pasara a estar deprecated posiblemente en PHP 6).
Como aportación, un ejemplo funcional y completo (con gestión de errores) en uno de los software que desarrollo:
http://bazaar.launchpad.net/~shakaran/qpanel/trunk/view/head:/httpdocs/l18n/l18n.php
@shakaran: una duda, sólo uso print cuando le paso parámetros en plan, print("%d comentarios", $comnetarios). ¿Se puede hacer eso mismo con echo? Creo que no, que tienes que concatenar cadenas.
Precisamente esa es la riqueza de echo, que puede mostrar una o mas cadenas a través de concatenación, cosa que printf, solo puede mostrar una cadena y poner todos los argumentos. Además printf te añade implícitamente un \n cosa que en scripts de shell puedes o no querer y con echo puedes controlar si imprimes con comillas simples o dobles. Ejemplo echo "\n"; imprime salto de linea y echo '\n'; te muestra \n pero no un salto de línea. Pero si haces echo ''; o echo ""; no te pone un salto de linea, en cambio printff(""); o printf(''); si que te lo pondrá.
Aparte echo es un constructor nativo del lenguaje, luego es mucho más rápido que una función invocada derivada como es printf.
Desde php3 y los antiguos usos de perl se usaba más, pero su uso ya no es muy recomendado, también es sinónimo de ver códigos antiguos y viejos, y programadores con experiencia lo califican enseguida como malas prácticas.
Pero bueno, es tu código, es tu decisión, yo solo te recomiendo que no es muy práctico.
@shakaran: Mil gracias por tu comentario, es verdaderamente enriquecedor. Hay veces como ésta en la que el comentario aporta más información que el contenido de la entrada.
Yo es por comodidad, a veces prefiero poner %d al estilo C a concatenar, pero tras leer tu comentario creo que me decantaré de forma permanente por echo.