En esta entrada enseñamos Behistun, un software que hemos liberado en intelligenia y que permite gestionar las traducciones estáticas en plantillas Twig en proyectos PHP.
Esto generará el fichero que asocia cada id con el texto original (web.source.php) y el fichero de traducción (web.translation.php). Ambos se generarán en una carpeta en el mismo directorio que las plantillas, con la estructura locales/<código de idioma>/LC_MESSAGES/.
Diego
¿Qué es?
Behistun es un paquete que define un nuevo tag de Twig que permite traducir textos estáticos de forma sencilla y similar a como hace el tag {% trans %} del framework para Python, Django.Instalación
Hemos subido la versión inicial de este paquete a packagist, por lo que puedes instalarlo de forma sencilla escribiendo la siguiente orden en el terminal:
composer install
Configuración
Para definir los idiomas, se ha de definir como variable global $LANGUAGES que contendrá una lista de idiomas con el formato <idioma>_<país> (es_ES, en_US, fr_FR...). Por ejemplo:
$LANGUAGES = ["es_ES", "fr_FR"];
Uso
En las plantillas
Para marcar un bloque de texto como traducible, tenemos que envolverlo con el siguiente
{% translatable 'id del bloque' %}
Este texto se va a traducir
{% endtranslatable %}
El texto entrecomillado en el interior del tag indica el identificador que se usará a la hora de compilar los textos traducibles. Puede ser cualquier cadena, pero no debería repetirse con otro bloque si éste contiene un texto distinto.
Generar los ficheros de traducción
Una vez que hemos envuelto todos los textos traducibles, hemos de generar los ficheros con las traducciones. Desde un terminal situado en la raíz del proyecto (ruta vendor/intelligenia/behistun/behistun), ejecuta la siguiente orden:
php bin/update_translations.php <directorio de plantillas> <idioma> [purgar]
Ejecutar update_translations.php sin parámetros describe cada uno de los parámetros, por lo que si tienes alguna duda, no tienes más que acceder a esta ayuda en línea.
Algunos sistemas usan gettext (como por ejemplo el sistema de traducciones de Django), pero nosotros no queríamos complicar el proyecto en exceso, por lo que los ficheros de traducción no son más que ficheros PHP con un array que asocia cada id de bloque con un texto.
Esto hace que el sistema de carga de las traducciones sea muy sencillo y que el tiempo de carga de una traducción sea despreciable ya que sólo tiene que acceder a un elemento de un array.
Selección de idioma
Para seleccionar el idioma, sólo debes iniciar el sistema de traducciones con un idioma determinado. En el siguiente ejemplo, la variable LANGUAGE será una cadena con un identificador de idioma que existe en la variable global LANGUAGES:
$translator = new Translator($LANGUAGE);
Ojo, si estás trabajando con el idioma por defecto, no tendrás que iniciarlo, ya que no queremos que se llame a las traducciones.
Limitaciones
A día de hoy, Behistun no permite traducción condicional en función de si una variable es singular o plural.
Tampoco permite tener traducciones para idiomas no localizados. Esto es, en el caso de que se seleccione en_US, si sí existe otra variante de inglés, no se selecciona. O dicho de otra forma, no hay manera de seleccionar una variante como variante por defecto para ese idioma.
En el caso de que una traducción no se encuentre, muestra el texto original. Quizás en determinados países, para determinados idiomas sin traducciones, sería adecuado mostrar una traducción a un determinado idioma en vez del original, pero por ahora hemos preferido tomar la vía más fácil.
¿Quieres más información?
Visita el proyecto en GiHub en https://github.com/intelligenia/behistun. Si tienes alguna idea, sugerencia o quieres colaborar en el desarrollo de éste no dudes en ponerte en contacto con nosotros.
Diego
No hay comentarios:
Publicar un comentario