Blog

Todo el sitio web en cinco idiomas en 12 minutos, desde la línea de comandos

Esta página web está redactada en inglés. Las versiones en alemán, francés, croata, español y árabe, incluidas las 54 páginas de documentación, fueron traducidas por SwiftLing Pro desde la línea de comandos, utilizando OpenAI y mi propia clave. A continuación explico qué comandos ejecuté, cuánto tiempo tardó y qué partes seguí haciendo a mano.

La configuración

SwiftLing y SwiftLing Pro están activos, los cinco idiomas se han añadido en la pantalla «Idiomas» y se ha guardado una clave de OpenAI en la pantalla «Servicio de traducción». Elegí OpenAI como servicio de traducción y «gpt-6-sol» como modelo. Primero traduje la página de inicio con DeepL y luego todo el sitio web con ese mismo servicio, pero me pareció que la traducción de OpenAI era mejor, así que la sustituí.

El comando

wp swiftling translate --all --kind=post --lang=de --again=machine --user=admin

--all toma cada página de su tipo, --lang identifica el idioma (en este caso, el alemán) y --again=machine vuelve a traducir los textos que ya había traducido una máquina anteriormente, que es como se sustituyó la traducción de DeepL. Sin --again el comando, solo se rellenan los textos que aún no tienen traducción. Cada página se abre primero en el servidor, de modo que SwiftLing ve los textos que ve el visitante, y luego esos textos se envían al servicio.

Lo que hice en realidad fue ejecutar este comando con una lista de páginas en lugar de --all, ya que omití las dos páginas legales a propósito: un texto legal no debería ser traducido por una máquina sin que alguien lo revise. Lo ejecuté para los cinco idiomas a la vez, un proceso por idioma, por lo que el tiempo de ejecución es el del proceso más lento.

Las cifras

Languages5 (German, French, Croatian, Spanish, Arabic)
Pages54, plus the categories
Texts5,870
Characters sent622,050
Modelgpt-6-sol
Total time12 min 33 s
Fastest language (French)9 min 47 s
Slowest language (Croatian)12 min 33 s

No traduje los idiomas uno tras otro. Inicié cinco procesos a la vez, uno para cada idioma, y se ejecutaron en paralelo. Por lo tanto, el tiempo total es el del más lento, el croata. Si los hubiera hecho uno tras otro, los cinco habrían tardado unos 55 minutos (la suma de los cinco tiempos). En una prueba con una página traducida a dos idiomas se enviaron 3.810 caracteres y tardó 25 segundos, y utilicé ese dato para planificar la ejecución.

Cuánto costó

OpenAI cobra por tokens, no por caracteres. Su página de uso muestra un total de 4,67 dólares para ese día: 437 solicitudes y 353 000 tokens de entrada. Esa cifra corresponde a todo lo que hice con la clave ese día, no solo a esta ejecución. Incluye mis pruebas anteriores con un modelo más caro, el gpt-6-astra, por lo que la ejecución de todo el sitio con gpt-6-sol costó menos de 4,67 dólares. No separé ambas cosas, y calculo que la ejecución de todo el sitio en sí costó unos 3 dólares. El propio contador de SwiftLing mostraba una cifra mucho menor, ya que perdió parte de los recuentos cuando cinco procesos escribieron en él a la vez.

Lo que hice a mano

  • Elegí el servicio y el modelo en la pantalla «Servicio de traducción».
  • Había dos tipos de texto que no eran palabras, así que SwiftLing los dejó tal cual o yo le indiqué que mantuviera el texto original: las direcciones de las imágenes y un ejemplo de código.
  • El árabe se escribe de derecha a izquierda, por lo que se necesita el paquete de idioma árabe propio de WordPress.
  • La página de inicio, así como el encabezado y el pie de página, se tradujeron anteriormente con DeepL y no se han vuelto a traducir.

¿Qué salió mal y qué es lo que esto no significa?

  • Al ejecutar cinco idiomas a la vez se detectaron dos errores en SwiftLing: una fila del índice de búsqueda se escribía dos veces y el contador de uso perdía recuentos. Ejecutar los idiomas uno tras otro tampoco provoca ninguno de estos errores. Se trataba de errores en el complemento, y los he corregido ambos: ahora la entrada del índice se sustituye en lugar de insertarse, y el contador está programado de tal forma que ningún proceso pueda sobrescribir los recuentos de otro.
  • Se trata de traducciones automáticas. Todavía nadie las ha leído, y SwiftLing las marca como tales para que alguien pueda revisarlas en el editor. Yo no sé leer árabe, así que debería hacerlo un hablante nativo.
  • Las páginas legales no están traducidas, a propósito.
  • Los comandos no detectan los textos que genera un script una vez que se ha cargado la página, ya que el comando abre la página sin ejecutar los scripts.

Si quieres probarlo, los comandos están en la documentación de WP-CLI. Si detectas algún error, avísame en GitHub.