Cómo traducir automáticamente plugins y temas de WordPress con Google Translate

en flag
es flag

Todos hemos oído la estadística de que WordPress ahora alimenta más del 33% de los sitios web, pero ¿cómo se puede asegurar que su plugin o tema se puede utilizar lo más ampliamente posible dentro del ecosistema?

Sorprendentemente, menos de la mitad de todos los sitios de WordPress tienen su configuración regional en Inglés! Si no tienes ya las traducciones configuradas, eso significa que más del 50% de tus clientes potenciales probablemente no pueden trabajar con tu producto en el idioma que mejor entienden.

WordPress.org Locale Stats

Una de las mejores maneras de abrir su producto al mundo es creando traducciones de alta calidad de todo el texto orientado al usuario, pero el problema es que la traducción lleva mucho tiempo (cuanto más texto tenga en su producto, más cadenas se traducirán). La traducción también requiere dominio en diferentes idiomas, conocimiento de cómo administrar archivos MO y PO, y en general - un montón de esfuerzo.

Mi nombre es Diego Imbriani, y soy desarrollador de plugins desde 2011, he estado vendiendo mis plugins a través de mi empresa GreenReelabs y mis productos están actualmente activos en ~ 70.000 sitios web en todo el mundo.

Afortunadamente, encontré una manera de ayudar a aliviar todo el proceso de traducción y hacer que traducir plugins y temas sea mucho más fácil.

Intro

Recientemente quería agregar una traducción al italiano a uno de mis plugins: Final Tiles Gallery para WordPress, así que abrí el archivo PO del plugin, que contiene todas las cadenas traducibles, y comencé a traducir mi plugin línea por línea.

Italian PO file of Final Tiles Gallery

Un extracto del archivo PO italiano de Final Tiles Gallery

El archivo PO de Final Tiles Gallery tiene alrededor de 350 entradas y traducirlas todas requiere alrededor de 2 horas y, honestamente, este trabajo no me parece muy atractivo. Mientras estaba investigando las traducciones, me pregunté si existía una forma de traducir automáticamente mi archivo PO...

¡Decidí experimentar un poco con la API de Google Translate y me las arreglas para codificar un script para lograr esta tarea exacta! A continuación, te guiaré paso a paso, mostrándote cómo puedes usar el script que creé para traducir automáticamente tus plugins o temas de WordPress.

WordPress e Idiomas

Debo admitir que nunca he estado muy preocupado por traducir mis plugins. Soy italiano, pero siempre usé programas y sistemas operativos en inglés. Se siente «raro» usar cualquier tipo de interfaz de usuario que no esté en inglés. Tal vez eso es sólo yo:)

WordPress es utilizado por millones de personas de cualquier origen, idioma y cultura - de todo el mundo. Simplemente no podemos ignorar la traducción de nuestros plugins y temas.

WordPress es utilizado por millones de personas de cualquier origen, idioma y cultura - de cualquier parte del mundo. Simplemente no podemos ignorar la traducción de nuestros plugins y temas.Tweet

Vendo mis plugins usando Freemius, que tiene un panel ingenioso con análisis y estadísticas extremadamente útiles. Hace unos días, eché un vistazo a la tabla «Top 10 Languages» que se encuentra en su panel de desarrolladores, y aunque sé que muchos de los sitios donde Final Tiles Gallery está instalado no están en inglés, me sorprendió mucho encontrar que en una muestra de alrededor de 25.000 instalaciones, menos del 50% de los sitios web son en inglés! Aquí está la descripción general:

Total Installs by Country

Como puede ver, el francés, el alemán y el ruso hacen un gran porcentaje de usuarios con casi el 20% en total.

Beneficios de traducir un plugin o tema

Para WordPress plugin o negocios temáticos, traducir nuestros productos es también una oportunidad de marketing por muchas razones:

Público más amplio

No todos los usuarios de WordPress están dispuestos a instalar un plugin que no tiene una traducción en su idioma. Eso podría ser por muchas razones, pero principalmente porque probablemente no entienden el inglés.

En otros casos, los usuarios pueden entender el inglés, pero simplemente prefieren su propio idioma. Por lo tanto, dada la elección entre dos plugins similares, esos clientes elegirían el uno en su idioma, incluso si el otro plugin era un poco mejor.

También puede estar relacionado con razones culturales. A modo de ejemplo, por razones históricas, especialmente a la generación mayor de franceses no les gusta el idioma inglés. Si google «por qué el francés odia el inglés» encontrará docenas de artículos sobre el tema. Además, sólo alrededor del 40% del francés habla realmente el idioma. Por lo tanto, si su producto no se traduce al francés, usted pierde inmediatamente el 60% de la cuota de mercado francesa de WordPress. Y si hay una alternativa francesa a su producto, es probable que los pierda todos, o al menos la gran mayoría. Un análisis similar es relevante para muchos países asiáticos, como Japón, que aún no están «americanizados».

WordPress.org SEO

Vova Feldman, CEO de Freemius, ha escrito un poco sobre los beneficios de la traducción para SEO en el repositorio de WordPress.org, pero no se puede enfatizar lo suficiente. El hecho es que el algoritmo de búsqueda en el repositorio es altamente sensible al uso de diferentes idiomas en su readme.txt.

Centrar sus esfuerzos de traducción no solo en las cadenas de productos, sino también en el archivo readme.txt puede aumentar su alcance de marketing en el repositorio. Aunque la mayoría de los usuarios están buscando en inglés, está claro, según las estadísticas de configuración regional de WordPress.org, que hay muchos usuarios que no buscan en inglés, y por lo tanto sólo tienen acceso limitado a muchos de los plugins y temas disponibles para aquellos que entienden inglés.

El algoritmo da diferentes resultados en función de la configuración regional de una instalación de WordPress dada - traducir su producto supera esta barrera para obtener la exposición a los usuarios que normalmente nunca sería capaz de alcanzar.

Vova lo dijo muy bien cuando dijo: «¡En pocas palabras, las traducciones son ahora más importantes que nunca!» - y sigue siendo cierto más de un año después.

Reputación

Traducir su plugin o tema tiene algunas implicaciones psicológicas positivas para su cliente. Un plugin o tema que ofrece traducciones en el propio idioma de sus clientes puede ser percibido como un producto de mayor calidad. Significa que el desarrollador invirtió tiempo en algo más que en cuestiones técnicas. Los clientes reconocerán este valor y esperemos que vean la calidad de su producto de una manera diferente.

Un plugin o un tema que ofrece una traducción en su propio idioma puede ser percibido como un producto de alta calidad. Significa que el desarrollador se ocupó de pasar tiempo en algo más que solo cuestiones técnicas.Tweet

Colaboradores

Agregar traducciones a su plugin o tema puede crear un efecto de knock-on de traductores voluntarios en el repositorio de WordPress.org si ofrece un plugin o tema gratuito. Un plugin que incluso sólo tiene unos pocos idiomas traducidos es percibido como mucho más popular que un plugin sin traducciones en absoluto, por lo que los voluntarios pueden estar más dispuestos a contribuir.

Translations stats for the Gutenberg plugin

Lista de algunas estadísticas de traducciones para el plugin Gutenberg

Ahora que entendemos los beneficios de traducir nuestros productos, la siguiente pregunta es: ¿Cuántos idiomas debemos apoyar?

Elegir los idiomas admitidos

Comencemos diciendo que no hay límite en la cantidad de idiomas que puede admitir. Pero, tenemos que considerar algunas cosas antes de simplemente traducir su plugin o tema en todas ellas.

El problema es que si traduces todos los idiomas usando Google Translate, inevitablemente habrá traducciones incorrectas. El problema resultante es que puede obtener comentarios de los usuarios sobre traducciones incorrectas en su plugin o tema.

Para resolver este problema, sugiero comenzar con los idiomas más populares, y este tipo de datos se pueden obtener de 3 lugares. El primero es el panel de control para desarrolladores de Freemius, como se mencionó anteriormente. Si no usas Freemius, otra opción útil es la página de estadísticas de WordPress.org que muestra las configuraciones más populares de WordPress. Otra opción sólida sería consultar las estadísticas de Google Analytics para el sitio web de su producto.

Suscríbase y coja una copia gratuita de nuestra WordPress Plugin Libro de Negocios Exactamente cómo crear un próspero negocio plugin de WordPress en la economía de suscripción. Compartir con un amigo Introduce la dirección de correo electrónico de tu amigo. Sólo les enviaremos este libro por correo, honor de exploradores. Gracias por compartir Impresionante - una copia de 'El WordPress Plugin Business Book' acaba de enviar a. ¿Quieres ayudarnos a correr la voz aún más? Vamos, comparte el libro con tus amigos y colegas. ¡Gracias por suscribirse! - acabamos de enviar su copia de 'El WordPress Plugin Business Book' a. Compartir con un amigo Reenviar correo electrónico ¿Tiene un error tipográfico en su correo electrónico? haga clic aquí para editar la dirección de correo electrónico y enviar de nuevo. Descargar

Dondequiera que apunten los números, puede optar por ir con los idiomas que tienen el público más grande. Si primero ofreces algunas traducciones a esas audiencias, puedes pedir a algunos de tus clientes o colegas que revisen las traducciones antes de publicarlas públicamente, de modo que no te abrumen los comentarios de los clientes sobre problemas menores de traducción. Fiverr también tiene un montón de profesionales que pueden ayudar a confirmar sus traducciones.Usted puede minimizar aún más su carga de soporte agregando una notificación en la configuración de administrador de WP de su plugin o tema para informar a los usuarios de que sugieran actualizaciones de traducción en el repositorio de WordPress.org en lugar de enviar un ticket de soporte.

Seguir este proceso paso a paso para cada idioma es una forma lógica de proceder para que pueda lograr traducciones de alta calidad y evitar que su cola de soporte se desborde con toneladas de tickets pequeños.

Uso de la API de Google Translate para traducir su plugin/tema

Google Cloud proporciona una API para que puedas usar Traducir como servicio.

Precios de la API de Google Translate

La versión 3 de la API es gratuita hasta 500.000 caracteres por mes, y $20 por millón de caracteres si excede la cuota. Puede leer los detalles de precios aquí.

Translation API Pricing

Precios de la API de Google Translate (mayo 2019)

Una nota al margen rápida - internacionalizada

Todos los plugins deben ser internacionalizados antes de ser localizados. Un gran lugar para empezar es la guía WordPress.org i18n para desarrolladores de WordPress que explica los pasos. Una vez que haya creado sus archivos.pot/.po, puede continuar con el proceso de scripting a continuación.

Todos los plugins deben ser internacionalizados antes de ser localizados. Un gran lugar para empezar es la guía WordPress.org i18n para desarrolladores de WordPress que explica los pasos.Tweet

¡Vamos a Script!

Antes de que podamos ejecutar el script tenemos que crear un nuevo proyecto en la consola de Google Cloud. Si necesita ayuda con esta tarea, consulte esta guía o siga estos pasos:

Vaya a e inicie sesión.

Haz clic en «Ninguna organización» o selecciona tu organización preferida (suponemos que no tienes ninguna):

3. Haga clic en «Nuevo proyecto»:

4. Introduzca un nombre de proyecto y haga clic en «Crear»:

5. Ahora debe ser redirigido al panel de la consola. Haga clic en «Habilitar API y servicios»:

6. Busque la «API de traducción en la nube»:

7. Haga clic en «Habilitar»:

Ahora que tenemos un proyecto, necesitamos configurar una cuenta de servicio para autorizar nuestras solicitudes a las API de Google. Puede seguir los pasos 1 y 2 de esta guía desde la plataforma Google Cloud, de lo contrario, siga estos pasos:

Vaya a la sección «Cuentas de servicio» desde el menú principal: «IAM y Admin»:

2. Haga clic en «Crear cuenta de servicio»:

3. Introduzca un nombre y una descripción para la cuenta de servicio y haga clic en «Crear»:

4. Haga clic en «Continuar» para omitir la selección de roles ya que no la necesitamos:

5. Ahora haga clic en «Crear clave» y luego haga clic en «Crear», asegúrese de seleccionar el formato JSON:

6. Después de crear la clave, el navegador la descargará automáticamente. Recuerda la carpeta en la que vas a guardar el archivo, ya que lo necesitaremos más adelante.

Ahora todo está listo para funcionar, pero antes de ejecutar el script, asegúrese de haber establecido la variable de entorno GOOLE_APPLICATION_CREDENTIONS como se describe en la guía:

Ejemplo: Linux o macOS

Reemplace [PATH] con la ruta del archivo JSON que contiene su clave de cuenta de servicio.

export GOOGLE_APPLICATION_CREDENTIALS= "[PATH]»

Por ejemplo:

export GOOGLE_APPLICATION_CREDENTIALS=» /HOME/user/downloads/service-account-file.json»

Ejemplo: Windows:

Reemplace [PATH] con la ruta de archivo del archivo JSON que contiene la clave de cuenta de servicio y [FILE_NAME] con el nombre de archivo.

Con PowerShell:

$env:google_application_credencials= "[PATH]»

Por ejemplo:

$env:google_application_credentials ="c:usersusernamedownloads [FILE_NAME] .json»

Con símbolo del sistema:

establecer GOOGLE_APPLICATION_CREDENTIALS= [PATH]

Ahora que hemos terminado con las cosas aburridas, podemos empezar a traducir!

Clonar el repositorio desde

Abra la línea de comandos y ejecute el siguiente comando:

Clonación de Git

Si no tienes git instalado puedes descargarlo aquí.

Introduzca el directorio po-translator:

cd po-gtranslator

Instale las dependencias:

instalación de npm

En caso de que no tenga la utilidad npm, asegúrese de instalar Node.js desde aquí.

Ejecute el script con todos los parámetros necesarios:

node po-gtranslator.js —project_id=final-tiles-gallery —po_source=it.po —po_dest=it_it.po —mo=it.mo —lang=it

Echemos un vistazo a cada parámetro:

—project_id: ID de tu proyecto de Google, puedes obtenerlo desde la consola de Google Cloud

—po_source: ruta del archivo PO vacío que desea traducir

—po_dest: ruta del fichero PO con las traducciones

—mo: ruta del archivo MO

—lang: código del idioma al que desea traducir

Tenga en cuenta que el archivo PO de origen se mantendrá sin traducir y se puede utilizar para generar tantos idiomas como necesite. El archivo PO que necesita agregar a su plugin o tema es el que pasa como —po_dest, que es único para cada idioma.

Auto Translation in Action!

po-gtranslator.js en acción!

¡Gracias por escribir conmigo!

Ha sido una experiencia de aprendizaje divertida para mí entender este proceso, y espero que te ayude en tus esfuerzos de traducción. Póngase en contacto conmigo @GreenTreeLabs o comente a continuación con cualquier pregunta o comentario.

19 comments

  1. The worst idea to give to a dev as any Google translations will be rejected by most of WordPress.org GTEs or PTEs. It’s just a waste of time and money.
    If you need to get your plugins/themes translated you should better ask and invest in dedicated companies, like WP-Translations 😉

    1. Thanks for your feedback. I actually have published my translations and none has been rejected. If we want to discuss about the quality of an automatic translation VS a human one, clearly no doubt the latter wins but this is clearly stated in my article 😉

      1. I think that there are two different cases :
        – When you are the developer of a plugin, there is no review from WP teams to check your translations, you can put whatever you want.
        – When you want to contribute for a plugins translation, you can submit it, but WP team will check it and take a moment before validate it.

        I’ve tested both, that’s why I say that.

  2. Hey Diego,

    How do you handle translations if you’re using Freemius to generate a free version AND a premium version of your plugin? The .POT file for the free version will contain references to text that does not exist, and the line numbers will be wrong.

    1. Hey Chris, sorry for the very late response. The free version contains also the strings contained the premium version so not really the best solution, however you can run the script twice, one for the free version and another for the premium one.

  3. Thanks a bunch for this. I needed to translate a theme, and really didn’t want to do it all by hand. This is a fantastic time saver. all that will be left when the file finishes processing will be to check and trim, and that would be it.

    Fantastic guide!

  4. Hello Diego,

    This is a great tutorial! I completed all the steps you described succesfully and I triple-checked them. When I run the script, it throws the error message below at me. The .json file is definitely in the right spot; I also tried moving it to an other folder and even another disk, but that didn’t solve the issue.

    Do you have any idea of what I’m doing wrong and how to solve that?

    Thank you,

    Harold

    C:\Users\Harold Kip\po-gtranslator>node po-gtranslator.js –project_id=MY-PROJECT-ID –po_source=D:\Downloads\en_EN.po –po_dest=D:\Downloads\nl_NL.po –mo=D:\Downloads\en_EN.mo –lang=nl
    (node:3480) UnhandledPromiseRejectionWarning: Error: The file at “C:\Users\Harold Kip\po-gtranslator\MY-PO-TRANSLATE-FILE.json” does not exist, or it is not a file. ENOENT: no such file or directory, lstat ‘C:\Users\Harold Kip\po-gtranslator\”C:’
    at Object.realpathSync (fs.js:1539:7)
    at GoogleAuth._getApplicationCredentialsFromFilePath (C:\Users\Harold Kip\po-gtranslator\node_modules\google-auth-library\build\src\auth\googleauth.js:250:27)
    at GoogleAuth._tryGetApplicationCredentialsFromEnvironmentVariable (C:\Users\Harold Kip\po-gtranslator\node_modules\google-auth-library\build\src\auth\googleauth.js:192:25)
    at GoogleAuth.getApplicationDefaultAsync (C:\Users\Harold Kip\po-gtranslator\node_modules\google-auth-library\build\src\auth\googleauth.js:130:33)
    at GoogleAuth.getClient (C:\Users\Harold Kip\po-gtranslator\node_modules\google-auth-library\build\src\auth\googleauth.js:502:28)
    at GoogleAuth.authorizeRequest (C:\Users\Harold Kip\po-gtranslator\node_modules\google-auth-library\build\src\auth\googleauth.js:543:35)
    at Translate.makeAuthenticatedRequest (C:\Users\Harold Kip\po-gtranslator\node_modules\@google-cloud\common\build\src\util.js:377:28)
    at Translate.request_ (C:\Users\Harold Kip\po-gtranslator\node_modules\@google-cloud\common\build\src\service.js:129:18)
    at Translate.request (C:\Users\Harold Kip\po-gtranslator\node_modules\@google-cloud\common\build\src\service.js:140:36)
    at Translate.request (C:\Users\Harold Kip\po-gtranslator\node_modules\@google-cloud\translate\build\src\v2\index.js:439:19)
    (node:3480) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `–unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
    (node:3480) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

  5. Thanks for sharing this!
    Admittedly I got started on this, but somehow learned PoEdit Pro also does this, so coughed up some money to buy it and saved myself a bit of time.

Leave a Reply

Your email address will not be published. Required fields are marked *