`translation:extract` Comando
Keep on Learning!
If you liked what you've learned so far, dive in! Subscribe to get access to this tutorial plus video, code and script downloads.
With a Subscription, click any sentence in the script to jump to that part of the video!
Login SubscribeHasta ahora, hemos estado creando claves de traducción y añadiéndolas manualmente, junto con sus valores, a messages.en.yaml
. ¿Pero sabías que existe un método alternativo que automatiza parte de este proceso?
Vamos a traducir los dos elementos de menú que nos quedan: "Tiempo" y "Diario".
Abre templates/base.html.twig
y busca el texto de estos elementos de menú. Sigue nuestra rutina habitual de buscar una clave y utilizar el filtro trans
. {{ 'base.weather'|trans }}
y {{ 'base.journal'|trans }}
:
// ... line 1 | |
<html lang="{{ app.locale }}"> | |
// ... lines 3 - 17 | |
<body class="bg-[url('../images/bg-planet.png')] bg-contain bg-no-repeat"> | |
<nav class="flex items-center justify-between flex-wrap py-6 mx-auto px-4"> | |
<div class="flex items-end flex-shrink-0 mr-6 text-white"> | |
// ... lines 21 - 24 | |
<a href="#" class="hidden ml-4 mt-4 lg:inline-block lg:mt-0 hover:text-[#5BA8DC] mr-4">{{ 'base.weather'|trans }}</a> | |
<a href="#" class="hidden ml-4 mt-4 lg:inline-block lg:mt-0 hover:text-[#5BA8DC] mr-4">{{ 'base.journal'|trans }}</a> | |
</div> | |
// ... lines 28 - 76 | |
</nav> | |
// ... lines 78 - 85 | |
</body> | |
</html> |
Bien, en lugar de añadir manualmente estas entradas a nuestro archivo messages.en.yaml
, dirígete a tu terminal y ejecuta:
symfony console translation:extract en --dump-messages
Este comando es similar a debug:translation
en el sentido de que escanea tu código y encuentra claves de traducción. Estas claves en verde son las nuevas que hemos añadido y aún no tienen entradas en nuestro archivo messages.en.yaml
.
Añadir nuevas claves al archivo YAML
Podemos utilizar el comando para añadir automáticamente estas nuevas claves a nuestro archivo YAML. Ejecuta de nuevo el comando, pero sustituye --dump-messages
por --force
. A continuación, añade --format=yaml
para que escriba como YAML, y --as-tree=3
para mantener las claves sangradas a tres niveles de profundidad en el archivo YAML.
symfony console translation:extract en --force --format=yaml --as-tree=3
¡Vuelve a messages.en.yaml
y compruébalo! ¡Aquí están nuestras nuevas claves!
base: | |
// ... lines 2 - 3 | |
weather: __base.weather | |
journal: __base.journal | |
// ... lines 6 - 9 |
Los valores son los nombres de las claves prefijados con __
(dos guiones bajos). Esto puede ayudarte a encontrarlas rápidamente si hay muchas. Este prefijo puede personalizarse si lo deseas.
Sustitúyelos por el texto adecuado: "Tiempo" y "Diario":
base: | |
// ... lines 2 - 3 | |
weather: Weather | |
journal: Journal | |
// ... lines 6 - 9 |
Actualiza tu aplicación y listo... no ha cambiado nada, ¡pero sabemos que funciona!
Si estás traduciendo en masa un sitio existente como nosotros, creo que este método puede ser más engorroso que nuestro proceso anterior. Lo que acaba ocurriendo es que, al añadir claves en masa en tu código, una vez que las extraes, ¡te olvidas del texto original!
Pero! este método funciona muy bien cuando desarrollas una nueva función. Puedes añadir las claves para el texto en tu código, y averiguar el texto real más tarde.
Convertir a diferentes formatos
Este comando tiene otra función genial, ¡quizás no intencionada!
Supongamos que tienes un servicio de traducción que te pide que envíes tu archivo de traducción en inglés, y ellos te lo devolverán en francés. Fácil, ¿verdad? Sólo tienes que enviarles messages.en.yaml
. Pero... ¡no saben qué demonios es YAML! Quieren el archivo en un formato compatible con su software: XLIFF
.
¡No te preocupes! ¡El comando translation:extract
puede convertir a diferentes formatos!
Ejecuta esto:
symfony console translation:extract en --force --format=xliff
En nuestro directorio translations/
, tenemos un nuevo archivo: messages.en.xliff
. Ábrelo.
¡Uf! ¡Qué asco! ¡XML!
No te preocupes: ¡a los programas de traducción les encanta! Sólo tienes que enviarles este archivo y decirles que intercambien el texto de <target>
, que es inglés, con las traducciones al francés.
Cuando te lo devuelvan, cámbiale el nombre a messages.fr.xliff
y vuelve a colocarlo en el directorio translations/
. Sólo tienes que cambiar el primer <target>
para que diga "(Francés) Asteroides Locales":
// ... line 1 | |
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> | |
<file source-language="en" target-language="en" datatype="plaintext" original="file.ext"> | |
// ... lines 4 - 6 | |
<body> | |
<trans-unit id="SWPFW5B" resname="base.local_asteroids"> | |
// ... line 9 | |
<target>(French) Local Asteroids</target> | |
</trans-unit> | |
// ... lines 12 - 27 | |
</body> | |
</file> | |
</xliff> |
De vuelta en nuestra aplicación, cambia a la versión francesa de esta página y ¡bum! "(Francés) Asteroides Locales".
Vale, ya está bien de XML por hoy: borra messages.fr.xliff
.
¿Y si no tienes un servicio de traducción al que puedas enviar estos archivos? No hay problema Hay soluciones basadas en la nube que pueden ayudarte, ¡y Symfony tiene integraciones para ellas! ¡Vamos a comprobarlo!
I noticed you were often typing "clear" in the terminal.
As you are using a Mac: Did you ever try apple(command)-k instead? :-)