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.
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.
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.
Great, thanks for sharing this translator class
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?
Yo lo tengo subido tal cuál está en Github cambiando el archivo json-example.php por index.php, prueba a descargar el zip y subirlo, también prueba a hacer pruebas unitarias. No, esto es precisamente para no usar la versión de pago.
https://github.com/statickidz/php-google-translate-free
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.
Hola, habria alguna manera de utilizarlo en wordpress? Gracias.
¿De que manera te gustaría utilizarla en WordPress?
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.
Perfecto como siempre, buen trabajo…
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 día de hoy algo haces mal, que error es?
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!
Alguien ha resuelto el problema que comentaba Jose «El problema está que no funciona en local (utilizo xampp).»
Gracias
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.
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.
Gracias por compartirlo. Un saludo!
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.
Descarga la nueva librería, he actualizado algunas cosas
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.
Me alegro, espero que te sirva.
Hola, esta API funciona para Java???
No, es un script de PHP, tendrías que llamarlo mediante un servidor.
Que buen script
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.
quisiera q en ves de traducir texto lo pueda implementar con imagenes o videos pequeños q tengo en mi base comopodria hacer eso
Necesitarás una librería OCR para reconocer el texto de imágenes.
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…
En github he subido la actualización de código.
Gracias Adrián ya funciona…
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
En github he subido la actualización de código.
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.
En github he subido la actualización de código.
Muchas gracias!!
Excelente tuto, pero al probarlo local me da el siguiente error {«status»:false}
Revisa el post, está actualizado hoy mismo
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.
Revisa el post, he actualizado la información de como se usa ahora.
Excelente aporte Adrián, te deseo exito.
Es brillante! Muchas gracias!
Esta genial la implementación, me funcionó de un tiro.
Gracias
Muy buena aportación, muchas gracias!
Si quisiera implementar mas idiomas, su puede?
Hola Miguel, tan solo tienes que escribir los códigos de idioma disponibles https://cloud.google.com/translate/docs/languages
Estoy teniendo problemas en la implementación, podrías ayudarme?
trabajo con larabel y ya descargue la libreria desde git hub… Pero no se bien como implementarlo…
bueno pues lo tratare y despues are un comentario positivo o negativo .
Hola Adrian! revisá la cantidad de caracteres… de 5k lo bajaron a 3900
Gracias por avisar, le daré un ojo
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!
Seguramente no estés implementando bien el script, ¿puedes darme más info de como lo hiciste?
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?
Hi Leo, right now library can’t do that, I’m sorry. Alternatively you can do some scraping in other website and get pronunciations
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
No, no tienes ningún límite. Saludos.
Hola gracias por tu pronta respuesta
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
Are you using Telegram PHP API or JS? There is another JS lib on my github profile, else try to dive in to composer to use the API.
Uso telegram php
Perdonami, ma non riesco a capire come…poi va e non va, è normale?
Grazie di tutto
se hai un contatto diretto (Telegram sarebbe ottimo) faremmo prima.
Io uso php
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
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!
Ok, vaya no sabía que un server bajo ISS daba problemas con async/await, me imagino que con promesas también no? Lo tendré en cuenta si alguna me toca un entorno así!
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!
No siempre se leen posts así, muchas veces cuesta registrarse y comentar pero en este caso
vale la pena. Gracias por el maginifico post.
A ti por leerlo, un saludo
“human translation API” o API de traducción humana, como se usa esa API?
En Github tienes la forma de usarlo en PHP y JS
Muito bom, obrigado, me ajudou muito, simples e objetiva.
buenas esta apareciondo {«status»:false} en ver una petición real por que sera?
hola quien sabe que paso con la api que no funciona manda este error {«status»:false}
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
hola, el servicio está fuera de línea, ¿cuándo restaurar? gracias
muy buenas….
han debido cambiar la url del traductor de google porque no funciona
un saludo y muchas gracias
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.
tiene algun numero limite de llamadas ya que en un principio me funcionaba correctamente pero ahora ya no me funciona…
Hola, ejecuté el script y no me devolvió nada.
Deseo saber si código aún funciona.
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?
hice la prueba y funciono al tiro! ahora voy a implementar un proyectico que tengo muchisimas gracias!
Buen Dia, aun esta en funcionamiento ya que me encuentro con el siguiente error
Invalid argument supplied for foreach()
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!!