Internacionaliza (i18n) tus aplicaciones PHP de tamaño pequeño o mediano de la forma más rápida y sencilla

Para que tus aplicaciones web PHP de tamaño pequeño o mediano, por ejemplo, la página web corporativa de una empresa, puedan gestionar varios idiomas, no te compliques la vida; delega la internacionalización (i18n) en los arrays PHP y en una sencilla función de traducción.

Lo primero que hay que hacer es crear la carpeta lang en la raíz de tu proyecto para poner las traducciones. Por ejemplo, si tu proyecto se llama /var/www/mi-proyecto, debes crear la carpeta /var/www/mi-proyecto/lang. Ahí pondremos las traducciones de la interfaz GUI de la aplicación web.

Suponiendo que hay que traducir la GUI al español, catalán y francés (asumimos que el idioma base es el inglés), la carpeta lang tiene que quedar así, con estos archivos:

Abramos ahora una traducción cualquiera, es.php, y examinémosla:

Vemos que el archivo es.php no es más que un array con la traducción al español del texto estático en inglés.

Ahora le toca el turno a la función de traducción. Vamos a crearla. Esta función tendrá dos parámetros: una frase en inglés y el idioma al que se quiere traducir dicha frase:

Con nuestra función translate ya programada, podemos, por ejemplo, traducir Home al español y obtener Inicio de la siguiente manera:

Por cierto, ponemos en translate todos los idiomas que maneja la aplicación (català, francés y español) por claridad, pero en realidad no es necesario. Hay una fórmula más concisa que te dejo a ti como ejercicio. Te animo a que escribas un comentario y pongas la versión resumida del translate que propone este post.

Es interesante canalizar todas las peticiones HTTP que recibe tu aplicación hacia un único punto, generalmente /var/www/mi-proyecto/index.php. Aquí incluiremos la función de traducción del apartado anterior. Asumiendo que la hemos puesto en el archivo /var/www/mi-proyecto/php/funciones.php, nuestro index.php queda así:

Llegados a este punto, aprovecho para recordarte que en config.php declaramos las constantes que maneja nuestro proyecto:

¡Ya hemos desplegado el sistema necesario para gestionar la web multiidioma! Tenemos las traducciones (o diccionarios) en /var/www/mi-proyecto/lang, hemos programado una función de traducción en el archivo /var/www/mi-proyecto/php/funciones.php y nos hemos asegurado de incluir ese archivo en index.php para que esté siempre disponible en cualquier punto del flujo de ejecución del programa.

Sólo queda hacer uso de la función translate. Are you ready? Esta parte es la más sencilla. Con todo lo anterior en marcha ya podemos crear, por ejemplo, el menú de navegación en layout.php: