Usar la API del Traductor de Google Clase en PHP para utilizar el traductor de Google de forma gratuita

PHP, Proyectos, Recursos

Hace poco un cliente me planteaba la posibilidad de usar la API del famoso traductor de Google para implementarlo en una aplicación Android e iOS, hasta la fecha estaba usando la versión de pago la cuál para el número de peticiones que realizaba no le estaba siendo rentable.

Por este motivo decidí crear una pequeña clase en PHP para que pudiese utilizarla desde su propio servidor y no tener que pagar la cuota. El método para utilizar esta API es mediante CURL en PHP, todo el código puede ser portado a otros lenguajes, es bastante simple de utilizar.

La he colocado en GitHub para acceso público, lo único que tienes que hacer es clonar el proyecto en tu escritorio o descargarlo y empezar a usar esta clase de PHP.

Actualización: También podéis descargar la libería para NodeJS desde aquí.

Instalación

La instalación se hará mediante composer escribiendo en consola:

composer require statickidz/php-google-translate-free

o bien editando el archivo composer.json y añadiendo:

"require": {
    "statickidz/php-google-translate-free": "^1.0"
}

Uso

require_once ('vendor/autoload.php');
use \Statickidz\GoogleTranslate;

$source = 'es';
$target = 'en';
$text = 'verdadero';

$trans = new GoogleTranslate();
$result = $trans->translate($source, $target, $text);

echo $result;

Alternativas profesionales

Es de saber popular que el Traductor de Google no es la mejor opción si lo que estamos buscando es una traducción profesional, para ello podemos recurrir a expertos o utilizar otras plataformas como la que os presento a continuación.

tran-sl-logo

Ellos mismos se apodan como «human translation API» o API de traducción humana. Realmente es como suena. Disponen de una gran red de traductores a la que tu, como traductor te puedes unir para ganarte un dinerillo.

Actualmente soportan archivos PO, JSON, TXT, XML mediante traducción en la API en «tiempo real», porque al ser humanos los que traducen, puede tardar. Es ideal, a mi modo de verlo, para empresas e incluso start-ups que mediante un acceso aportado previamente a archivos remotos y enlazados con la API, Trans SL pueda realizar su servicio de forma transparente.

También brindan por la traducción de contenido generado, sin duda algo muy llamativo, publicar una entrada en tu blog y en cuestión de minutos-horas tienes tu post traducido al idioma deseado.

Sin duda es un servicio a tener en cuenta si estás buscando una traducción profesional, y no me pagan por decirlo, pero las cosas bien hechas, bien hechas están.

88 comentario

  1. Hola. Esa solución de API no funciona completamente, y realmente es muy frustrante porque trato de traducir algo tan simple como esto «Born in a rough neighborhood to strict, but loving parents. Neil Brown, Jr, who was a gifted martial artist and self proclaimed «knucklehead «, received his first role in film purely by chance, when a producer Patty Thomas Robinson walked into his karate Dojo looking for a kid to be in the TV series WMAC masters, which was being shot in Orlando, FL . After catching » the acting bug» during filming, Neil claims he never looked back, and has been acting ever since.» y lo que me arroja es esta simple traducción «Nacido en un barrio peligroso a la estricta, pero los padres cariñosos.» Y listo… y que pasa con el resto del texto?

    • Hola John, el problema es por algún caracter que no está tratado como UTF-8 en Javascript, si usas la librería en PHP podrás comprobar que lo hace bien. Saludos.

  2. Hola.
    Tengo un problema para llamar por php a google traductor.
    me aparece el siguiente error :

    Se produjo un error al analizar el documento JSON. El documento podría no estar bien formateado.
    unexpected character at line 1 column 1

    Notice: Undefined offset: 0 in C:\xampp2\htdocs\traductor\GoogleTranslate.class.php on line 35
    {«status»:false}

    Podrias pasarme los fuentes. He visto que en tu url si que funciona https://statickidz.com/scripts/traductor/index.php?source=es&target=en&q=mi%20nombre%20es%20jose
    Felicidades por tu blob!!
    Muchas gracias

    • Dime cómo lo estás implementando, si como una API como en el ejemplo o estas incluyendo más código aparte. Asegúrate que envías todos los valores que requiere el método! Gracias a ti por comentar.

      • Cómo el ejemplo. De hecho he copiado el mismo código que el tuyo para hacer la prueba.
        He leido que google ya no permite acceder a la API y que si se desea se tiene que pagar.
        ¿Tu el ejemplo lo tienes usando la api de pago de google traductor?

          • El problema está que no funciona en local (utilizo xampp).
            Si lo alojo en un servidor externo si que funciona.
            Voy a ver si soy capaz de hacerlo funcionar en local porque es lo que necesito.
            Gracias.

  3. Lo implemente en mi servidor y funcionaba correctamente hasta hoy…. veo que el tuyo le pasa lo mismo y es debido a que la url de google devuelve error en la pagina, sabes si es eventual o es que lo han capado? gracias, el aporte es muy bueno y muy util y sencillo.

    • Gracias por avisar, si, lo habían capado. He tenido que buscar otra forma de hacerlo. Un saludo, lo tienes de nuevo subido a Github.

  4. Buenas Adrián.

    Estoy haciendo pruebas con el código y devuelve error.Hago algo mal o es que Google ha vuelto a caparlo.

    Muchas gracias por tu tiempo.

      • a mi me devuelve esto:
        {«status»:true,»translation»:»‘;INPUT_TOOL_PATH=’\/\/www.google.com’;var ctr, h;tld=’.com’;FEATURE_STICKINESS=[[,,,false,\»auto\»,\»en\»],true];window.jstiming.load.tick(‘prt’);Init(); «}

      • Ese fallo me lo daba con el ejemplo de github. con el codigo de la pagina, funciana al 100%.
        Muchas gracias!

  5. Alguien ha resuelto el problema que comentaba Jose «El problema está que no funciona en local (utilizo xampp).»
    Gracias

  6. Yo tengo problemas al traducir textos al francés, como por ejemplo con «Be sure that your students love and know you» obtengo «Assurez-vous que vos ?l?ves aiment et vous savez», es decir, no se ven las tildes francesas. He probado tal y como viene en la clase PHP, y así se ven rombos negros. Si utilizo la función utf8_decode() con el resultado, los rombos se transforman en esas interrogaciones. La salida está configurada (tanto por web como por consola) para poder mostrar UTF-8, así que no entiendo qué está pasando con el charset que me envía Google.
    Gracias.

  7. Me respondo a mí mismo.
    He visto, usando mb_detect_encoding() que la cadena me estaba llegando codificada en ISO-8859-1, así que la solución ha sido tan sencilla como usar iconv() con la opción de TRANSLIT para obtener la traducción en un francés perfecto.
    Un saludo.

  8. Buenas. Lo implemente en un servidor PHP tal como comentas. Puse el GoogleTranslate.Class.php en la carpeta raíz, y en la misma otro que llame traductor.php, en el cual copie tu código tal cual. Al hacer la prueba desde el explorado, poniendo http://192.168.0.135:3400/traductor.php?source=es&target=en&q=hola%20soy%20muy%20bueno, el JSON que me devuelve, primero me devolvía «status: false». Luego lo cambien para ver la respuesta, y tiene 2 comillas. Probé de todo, y no entiendo que es lo que no esta funcionando. Alguna idea ?? Aclaro que el servidor php funciona ok, ya que lo estoy usando. También probé ver si la consulta me la estaba bloqueando el Router, puse la ip del server en DMZ, y tampoco. Gracias.

  9. Yo estaba ideando traducirlo por la url, pero esto me la hace muy facil, tambien pense usar, simple html dom, en vez de curl, pero voy a provar si me funciona y vuelvo a decirles, pero es justo lo que necesito.

  10. Adrian, que buen aporte, por favor, necesito orientaciòn.

    Debo implementar algo que tiene que ver con computaciòn cognitva, para explicar donde estudio, me imagino que entra en el àrea este documento.
    Si la palabra no la encuentra, ¿hay forma de decirle a la API de que aprenda la respuesta o darle la opciòn de uno ingresarla?. Gracias.

    • Gracias Henry, pues según yo lo veo podrías crear una base de datos y jugar con eso que dices, pero sería ya implementación en el proyecto que estés desarrollando. Si ves que no traduce algo bien (propia del propio traductor de google) mándalo traducir a otro idioma y luego de ese lo traduces al que quieres.

  11. quisiera q en ves de traducir texto lo pueda implementar con imagenes o videos pequeños q tengo en mi base comopodria hacer eso

  12. Saludos a mi me da este error –> «8>Error 403 (Forbidden)!!1*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}403. That’s an error.Your client does not have permission to get URL / from this server. (Client IP address: 173.236.44.178) That’s all we know.»

    Le agradeceria que me ayudara…

  13. Hola Adrián, creo que ha dejado de funcionar. Tenía la API configurada en una app y me devuelve un 303, lo mismo ocurre en el ejemplo del post. Gracias

  14. Hola, actualmente no funciona, sabéis como solucionarlo?

    Google esta devolviendo error:

    ml lang=en>Error 403 (Forbidden)!!1*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}403. That’s an error.Your client does not have permission to get URL / from this server. (Client IP address: 2001:41d0:51:1::1cd9)

    That’s all we know.

  15. Pues gracias por el script, estoy descargando de git hub y me sale que no puede abrir GoogleTranslate.class.php ya lo he puesto en su misma carpeta y todo, he visto tus commits y he puesto versiones anteriores pero sale el error 403.
    Como digo ya he descargado tu github actualizado y puse el archivo GoogleTranslate.class.php al lado de index.php, y nada.

  16. Muy buena aportación, muchas gracias!

    Si quisiera implementar mas idiomas, su puede?

  17. hola,
    Intenté instalar la escritura, e hice una página de la prueba con el código antedicho, pero consigo solamente salida «true». ¿Qué debo hacer?
    Gracias!

  18. Hi! Firstly, congratulations by API. She is incredible.
    I need to know if with the API I can also get the pronunciation of the word. Ex.:
    Word: cidade (portuguese)
    Translation: city
    Pronunciation: ˈsitē
    I need the: ˈsitē

    Has as?

  19. Hola Amigo
    Me parece muy buena esta alternativa pero antes de usarla quisiera consultarte algo:
    ¿Hay algún límite de peticiones diarias, voy a traducir de una una enorme cantidad de términos y quisiera saber que límites tenemos? ¿Existe la posibilidad de que lo detecte como robot y comiencen a bloquear las peticiones usando tu código? Quizás en tu experiencia ya has probado algo así de muchas peticiones seguidas y puedas darme una respuesta.
    Saludos

  20. Salve, volevo sapere come poter sfruttare questa ali, in un bot telegram. Ho caricato tutta la directory sul mio server, ma nn riesco ora a configurarlo in base alle mie esigenze.
    Grazie a tutti

  21. En local me funciona perfectamente, pero en cuanto subo todo a producción, deja de funcionar la web por completo. (Node en IIS, node despliega los ficheros generados para angular 5)
     
    He usado otros módulos de node, y hasta ahora no he tenido este problema.

    El error es el siguiente:
    La codificación de caracteres del documento de texto sin formato no ha sido declarada. El documento se mostrará con texto «basura» en algunas configuraciones de navegador si el documento contiene caracteres externos al rango US-ASCII. La codificación de caracteres de la página debe ser declarada en el protocolo de transferencia o el archivo necesita usar una marca de orden de byte como firma de codificación.

    ¿Sabes que podría estar pasando?
    Igual la instalación tengo que hacerlo en el server y no en local?

    Muchas gracias

  22. Hola Adrián,
    Olvida el anterior comentario, no es culpa de tu módulo, es problema de async/await, que parece que a iss no le gusta.
    perdona las molestias y gracias!

  23. Joder, lo voy a dejar por hoy, no estoy. El fallo era que en azure por defecto pone una versión de node 6, que no soportaba async/await. Gracias por tu trabajo!

  24. “human translation API” o API de traducción humana, como se usa esa API?

  25. hola quien sabe que paso con la api que no funciona manda este error {«status»:false}

  26. Hello and thank you already. But after a while I have an error and the script does not work anymore. My error is: Warning: Invalid argument supplied for foreach () in C: \ wamp64 \ www \ apitranslation \ vendor \ statickidz \ php-google-translate-free \ src \ GoogleTranslate.php on line 123. Thanks in advance .

    • I would like to know if you managed to solve the problem?
      The same thing happens to me now

  27. muy buenas….
    han debido cambiar la url del traductor de google porque no funciona

    un saludo y muchas gracias

  28. El response devuelve lo siguiente:

    302 Moved
    The document has moved here.

    Haciendo click en el link me devuelve el siguiente comentario:

    Nuestros sistemas han detectado tráfico inusual procedente de tu red de ordenadores. Vuelve a intentar enviar la solicitud más tarde. ¿Por qué ha sucedido esto?

    Dirección IP: 186.22.13.189
    Hora: 2018-07-26T21:33:42Z
    URL: https://translate.google.com/translate_a/single?client=at&dt=t&dt=ld&dt=qca&dt=rm&dt=bd&dj=1&hl=es-ES&ie=UTF-8&oe=UTF-8&inputm=2&otf=2&iid=1dd3b944-fa62-4b55-b330-74909a99969e

    La url es la configurada actualmente en el archivo GoogleTranslate.php

    Com puedo solucionarlo, gracias por tu atención.

  29. tiene algun numero limite de llamadas ya que en un principio me funcionaba correctamente pero ahora ya no me funciona…

  30. Hola, ejecuté el script y no me devolvió nada.
    Deseo saber si código aún funciona.

  31. I have implemented your class as an aid to users of netPhotoGraphics. They can use it to aid in the translation of their site content (netPhotoGraphics supports multi-lingual sites.) It does have some issues with HTML tags. Some issues are language specific–for French and German (but not Spanish or Czech) it will change the closing paragraph tag into &ls;/ p>

    For HTML comments the a similar thing happens–the

    Is there anything I can do to overcome these issues?

  32. Buen Dia, aun esta en funcionamiento ya que me encuentro con el siguiente error
    Invalid argument supplied for foreach()

  33. Hola!! Cómo estas?, te cuento que implemente exactamente como explicas la api, y me funcionó perfecto! Pero de un momento a otro dejó de funcionar, entonces me da a pensar que tiene un tiempo de funcionamiento nada mas al ser gratis, quizas han hecho alguna modificacion ultimamente…
    Te agradecería si me comentaras si hay que hacer algo mas o si ya no funciona.
    Gracias por tu aporte!!

Enviar un comentario