Hace muy pocos días hemos necesitado traducir al vuelo y de forma totalmente automática descripciones en español a otros idiomas como inglés, alemán, ruso o chino, y dado que la API de Google Translate ha modificado sus condiciones y cobra $20 por cada millón de palabras traducidas, y que no nos apetecía hacer pasar por caja a nuestro cliente tuvimos que buscar una alternativa gratuita.

¿Y cuál fue? Pues muy sencillo. Tras rastrear por Internet dimos con una pista que nos puso en alerta sobre cómo conseguirlo. Gracias a Rupesh Patel se nos ocurrió este pequeño y sencillo código PHP que consiguió nuestro objetivo y que hoy compartimos con todos vosotros, así que esperamos que os guste, lo uséis y nos deis vuestros comentarios.

Manos a la obra

Lo primero que vamos a necesitar es una función como esta:

Copiar al portapapeles

Y otra como esta:

Copiar al portapapeles

 

Y listo, ya tenemos todo lo que necesitamos, aunque obviamente hay que hacer algunas cosas más, como procesar el texto que nos devuelve Google Translate, ya que no siempre es todo lo limpio que necesitamos, o guardar los textos recibidos en una base de dato, pero eso ya entra dentro de las necesidades de cada cual.

Vamos a explicar brevemente ambas funciones.

En la primera, traductor($url), vamos a procesar la URL que recibimos, para la que recibiremos una respuesta. Por ejemplo, para traducir el siguiente texto:

Copiar al portapapeles

recibiremos la siguiente URL:

Copiar al portapapeles

y la siguiente respuesta:

Copiar al portapapeles

que tras ser procesada por la función traductor, nos devolverá el texto que nos interesa:

Copiar al portapapeles

En la segunda, traduce($descripcion), se crean las URLs que necesitamos pasar a traductor. En nuestro caso hemos necesitado traducir al inglés, alemán, ruso y chino desde el español, pero podemos necesitar cualquier otra combinación, para obtener la URL correcta sólo necesitaremos el sitio web de Google Translate, un navegador web como Mozilla Firefox, por ejemplo, y Firebug o cualquier otra herramienta para desarrolladores que nos permita ver las consultas AJAX. De esta forma sólo tendremos que elegir la combinación de idiomas que necesitamos, copiar la ruta que aparece en la consola de Firebug y sustituir, por ejemplo,

Copiar al portapapeles

por

Copiar al portapapeles
Google Translate

Alternativa gratuita a la API de Google Translate

Con estos pocos ingredientes ya tenemos una alternativa totalmente gratuita a la API de Google Translate. Obviamente necesitaremos almacenar todos los datos recogidos en una base de datos, y como ya hemos dicho anteriormente procesar el texto recibido para limpiarlo de imperfecciones que recibiremos, pero básicamente con estas pocas líneas de código podemos traducir todo lo que queramos en tiempo real y totalmente gratis.

Actualización: Gracias al aporte del comentario de Daniel hemos simplificado la función traductor.

Artículos relacionados

Comentarios

Suscríbete
Notificar de
guest
36 Comentarios
Más antiguos
Más recientes Más votados
Pancho
Pancho
4 de octubre de 2013 11:31

Muy bueno, aunque siempre las traducciones no son totalmente correctas es de gran ayuda, saludos.

Jon
Jon
14 de octubre de 2013 12:42

Me da fallo en el patrón de preg_match_all y no sé como corregirlo me podrían ayudar?
Gracias y Un Cordial Saludo

Art Project Group
Art Project Group
14 de octubre de 2013 16:25
Responder a  Jon

En principio sólo existe un preg_match_all, en la línea 7 del código: preg_match_all('/[+"(.*?)",".*?"]/', $contenido, $procesa);

Si los has copiado exactamente igual a como está en el código, no debería devolverte ningún tipo de error, al menos en PHP 5.2.17, donde hemos hecho las pruebas pertinentes y funciona perfectamente a día de hoy (comprobado justo en el momento en el que estamos escribiendo esta respuesta).

Jose
Jose
18 de octubre de 2013 7:40

Exelente aporte!!!

Jose
Jose
25 de octubre de 2013 4:29

Por que al enviar una solo palabra que traduzca, la respuesta viene con los sustantivos?

Jose
Jose
25 de octubre de 2013 4:35

ya lo arregle, para esos casos hay que agregar un punto a la palabra, como finalizacion de la misma, saludos

Art Project Group
Art Project Group
25 de octubre de 2013 11:25
Responder a  Jose

Muchas gracias por el apunte.

Jon
Jon
25 de octubre de 2013 11:10

Ya me todo correctamente no sé el motivo porque fallaba el preg_match pero esta todo correcto yo lo que he hecho ha sido que cuando encuentra la palabra sustativo o verbo que termine de traducir a través de una Array.

Art Project Group
Art Project Group
25 de octubre de 2013 11:27
Responder a  Jon

Prueba con añadir un punto al final, tal y como ha apuntado Jose en su comentario.

De todas formas nos alegramos de que ya te funcione correctamente.

REY
REY
5 de noviembre de 2013 3:51

hice todo al pie de la letra y no me funciaona sera q tienen algun ejemplo q este funcionando para observar mi error gracias

Art Project Group
Art Project Group
5 de noviembre de 2013 8:02
Responder a  REY

Buenos días.

Escríbenos o mándanos por correo electrónico el código que utilizas para indicarte dónde está el error.

Un saludo.

Daniel
Daniel
24 de diciembre de 2013 14:53

Buenas!

Gracias por la info.Yo he encontrado un artículo para hacer los mismo pero en Python y que no necesita de una expresión regular para obtener el resultado. Pego el enlace por si es de utilidad:

http://www.3engine.net/wp/2013/12/python-como-traducir-textos-usando-google-translate/

Art Project Group
Art Project Group
26 de diciembre de 2013 10:27
Responder a  Daniel

Daniel, te hemos modificado la función traductor empleando la misma expresión regular que aparece en la entrada que aportas, haciéndola aún más sencilla mediante el uso de JSON. Quedaría así:

function traductor($url)
{
//Procesamos la URL
$contenido = file_get_contents($url);
//Procesamos la respuesta
$contenido = preg_replace('/,,,|,,/', ',"0",', $contenido);
$contenido = json_decode($contenido);

return trim($contenido[0][0][0]);

}

Esperamos que te guste la idea ;-)

Art Project Group
Art Project Group
24 de diciembre de 2013 14:56
Responder a  Daniel

Gracias por el aporte. A buen seguro a muchos de nuestros lectores le vendrá muy bien para sus proyectos.

Carlos
Carlos
5 de febrero de 2014 14:17

Buenas! Tengo un proyecto en marcha y querría saber si al insertar contenidos dentro de una base de datos a traves de un gestor de contenidos echo en PHP se podrá guardar la información insertada en el idioma principal, tanto en inglés como en catalán. Es posible?

Art Project Group
Art Project Group
5 de febrero de 2014 15:19
Responder a  Carlos

La respuesta es simple y sencilla… si. Lo único que tienes que hacer es pasar el texto que quieres traducir por la función antes de almacenarlo en la base de datos.

Gustavo M.Ch.
Gustavo M.Ch.
23 de abril de 2014 18:21

Muchas gracias

A mi me interesaba el frances mas que chino y el ruso.
//Traducimos de Español a frances
$url = "http://translate.google.es/translate_a/t?client=t&text=$descripcion&hl=es&sl=es&tl=fr&ie=UTF-8&oe=UTF-8&multires=1&prev=btn&ssel=0&tsel=4";
$frances = traductor($url);

Y aplique estos cambios

1.- Cree una nueva funcion porque tengo que leer un fichero csv y creo otro con los resultados:

function traduce_fichero ($csv){
$file = fopen($csv, "r") or exit("Imposible abrir el fichero!");
$save = fopen ($csv.".resultado.csv","w+") or exit ("Imposible escribir en el fichero");
//Leyendo fichero hasta final de linea
while(!feof($file))
{
$linea = trim (fgets($file));
if ($linea){
fputcsv ($save,traduce($linea),";");
}
}
fclose($file);
fclose($save);
}

2.- en la funcion «traduce» al final donde se indica «/Guardamos el resultado» agregue

return array (urldecode ($descripcion),$ingles,$frances,$aleman);

3.- Finalmante solo falta hacer la llamada:

traduce_fichero ("traducir.csv");

Y obtienes el fichero «traducir.csv.resultado.csv» con las 3 traducciones.

Art Project Group
Art Project Group
23 de abril de 2014 18:25
Responder a  Gustavo M.Ch.

Ahí queda para que otros lo puedan usar.

Muchas gracias por el aporte.

Jose Abraham Zepeda
Jose Abraham Zepeda
20 de mayo de 2014 3:22

Tengo un problema, con el codigo y no se por que esta pasando, en el servidor local de mi pc me traduce fantastico, recientemente subi la pagina a un host de paga y no me imprime el resultado de la traduccion, como que no se envia la peticion. ayuda

Art Project Group
Art Project Group
20 de mayo de 2014 7:13
Responder a  Jose Abraham Zepeda

Casi al 100%, el problema está en que tu ISP tiene capada la función file_get_contents.

Habla con ellos, es mucho más habitual de lo que te puedes imaginar.

Un saludo.

Jose Abraham Zepeda
Jose Abraham Zepeda
20 de mayo de 2014 18:40

Ok les dejo saber la respuesta, del soporte del host de paga, gracias saludos

Jose Abraham Zepeda
Jose Abraham Zepeda
22 de mayo de 2014 23:24

Hola pues vi la configuracion del servidor, y tiene deshabilitada esta funcion: allow_url_fopen, me supongo que por eso no me brinda la informacion la funcion file_get_contents, le pedi al soporte que la habilitaran y me dijeron que no se podia por cuestiones de seguridad, alguna alternativa para poder traducir texto? es de vital importancia para mi sitio web, saludos y gracias.

Art Project Group
Art Project Group
23 de mayo de 2014 7:04
Responder a  Jose Abraham Zepeda

Si tienes deshabilitada esa opción, sólo puedes intentarlo con cURL.

Suerte.

Jose Abraham Zepeda
Jose Abraham Zepeda
23 de mayo de 2014 18:16

ok muchas gracias, les avisare que encuentro.

anonimo
anonimo
4 de noviembre de 2014 22:15

me daba algunos problemas con caracteres utf8.. aquí os dejo la el código que me funciono perfecto

class translate {
//Procesa Google Translate
function traductor($url) {
//Procesamos la URL
$contenido = file_get_contents($url);

//Procesamos la respuesta
$contenido = preg_replace(‘/,,,|,,/’, ‘,’, utf8_decode($contenido));

$contenido = json_decode($contenido);

return trim($this->limpiar_array($contenido));
}

function txt($descripcion) {
//Codificamos la descripción para que Google la entienda
$descripcion = urlencode($descripcion);
//Traducimos de Español a inglés
$url = «http://translate.google.es/translate_a/t?client=t&text=$descripcion&hl=es&sl=es&tl=en&ie=UTF-8&oe=UTF-8&multires=1&otf=2&ssel=0&tsel=3»;

return $this->traductor($url);
}

function limpiar_array($array) {
$res=array();
$res[‘original’]=$array[0][0][1];
$res[‘english’]=$array[0][0][0];
$res[‘partes’]=array();

foreach($array[2] as $k1=>$d1) $res[‘partes’][$k1][‘palabra’]=$d1[0];
foreach($array[3] as $k2=>$d2)
{
$res[‘partes’][$k2][«sinonimos»]=array();
foreach($d2[2] as $sinonimo) $res[‘partes’][$k2][«sinonimos»][]=$sinonimo[0];
}

return $res;

}
}

$translate=new translate();
$data=$translate->txt(«Publicación de noticias sobre gadgets y tecnología.»);

Art Project Group
Art Project Group
5 de noviembre de 2014 8:23
Responder a  anonimo

Gracias por el aporte.

MarvinCe
MarvinCe
20 de marzo de 2015 22:36

Genio! Muchas gracias!

palma
palma
16 de abril de 2015 11:41

desde el +/- 06/04/2015 el enlace = CAPTCHA. Supongo para que google venda su API. ¿como lo haceis ahora?

Art Project Group
Art Project Group
16 de abril de 2015 12:05
Responder a  palma

Para averiguar la nueva URL sólo tienes que tirar de Firebug, pero, dado que nos has avisado, ya tienes actualizada la entrada con la nueva URL de Google Translate que te va a dar la respuesta sin problema alguno.

Esperemos que te sirva una buena temporada ;-).

Un saludo.

MarvinCe
MarvinCe
16 de abril de 2015 13:25

Gracias por la actualización! Me evito tener que usar la api de bing, abrazo!

palma
palma
16 de abril de 2015 14:03

Muchas gracias pero no he pillado todo ;–)) no soy programador y el castellano tampoco es mi idioma. Buscando una solucion hace horas… :–)) determiné que mi problema venia de la URL de google (CAPTCHA) como lo verifique y es comentado en otros sitios. Nuestro codigo actual es :

function traduce($texto, $lngOrigen, $lngDestino){
//Codificamos la descripción para que Google la entienda
$texto = urlencode($texto);

$url = «http://translate.google.es/translate_a/t?client=t&text=$texto&hl=$lngOrigen&sl=$lngOrigen&tl=$lngDestino&ie=UTF-8&oe=UTF-8&multires=1&otf=2&ssel=0&tsel=3»;
$traduccion = traductor($url);
if($lngOrigen == ‘de’){ return strtoupper($traduccion); }else{ return mb_strtolower($traduccion, ‘UTF-8’); }

}

//Procesa Google Translate
function traductor($url){
//Procesamos la URL
$contenido = file_get_contents($url);
//Procesamos la respuesta
preg_match_all(‘/[+»(.?)»,».?»]/’, $contenido, $procesa);
$descripcion = »;
foreach($procesa[1] as $procesado){
if (!preg_match(«/,[+.*?]/», $procesado)){
//if(strpos($procesado,’sustantivo’)) $procesado = substr($procesado,0,strpos($procesado,’sustantivo’));
$descripcion .= $procesado.’ ‘;
}
}
return trim($descripcion);
}

#######

Intento cambiar la URL con esta:

https://translate.google.es/translate_a/single?client=t& con mis variables y comento si o no funciona.

Muchas gracias

Art Project Group
Art Project Group
16 de abril de 2015 14:08
Responder a  palma

La verdad es que no damos ningún tipo de soporte gratuito. Si necesitas que te arreglemos el código, no tienes más que contratar nuestra Soporte técnico.

Un saludo.

palma
palma
16 de abril de 2015 14:15

Hola, Puse este codigo y NO me devuelve la traduccion…. Como (repito) no soy programador ;–)) seguro que me falta otro arreglo !…

$url = «https://translate.google.es/translate_a/single?client=t&text=$texto&hl=$lngOrigen&sl=$lngOrigen&tl=$lngDestino&ie=UTF-8&oe=UTF-8&multires=1&otf=2&ssel=0&tsel=3»;

$traduccion = traductor($url);
if($lngOrigen == ‘de’){ return strtoupper($traduccion); }else{ return mb_strtolower($traduccion, ‘UTF-8’); }

Un saludo

Productos y servicios

Últimas publicaciones

Últimos comentarios

¡Suscríbete!

Lista de correos de APG

PROTECCIÓN DE DATOS: De conformidad con las normativas de protección de datos, le facilitamos la siguiente información del tratamiento: (+)

  • Responsable: Art Project Group.
  • Fines del tratamiento: dar respuesta a las consultas o cualquier tipo de petición que sea realizada por el usuario a través de cualquiera de las formas de contacto que se ponen a su disposición en la página web. Envío de comunicaciones de productos o servicios (con su consentimiento).
  • Derechos que le asisten: acceso, rectificación, portabilidad, supresión, limitación y oposición. Más información sobre el tratamiento en los Política de Privacidad.

¡Lo que contamos en !

Acaba de publicarse #WordPress 7.0: más visual, más rápido y preparado para la IA

Conectores IA integrados
Nuevas superposiciones de navegación
Patrones más fáciles de editar
Revisiones visuales bloque por bloque
Mejor rendimiento y accesibilidad

De momento lo dejamos en espera

20 de mayo de 2026

A partir de #WooCommerce 10.9 se incluirá WooCommerce Additional Variation Images en el core lo que permitirá gestionar galerías en las variaciones de forma nativa.

Gran noticia que se suma a la iniciativa de incluir WooCommerce Brands en la versión 9.4.

¡Este es el camino!

20 de mayo de 2026 | 1