Traduccion de idioma cortesia de google en PHP
A veces necesitamos traducir algún texto y nos pasamos hooras y hooras mirando como pasar una simple frase de un idioma a otro...
Eso me ha pasado a mi el otro dÃÂa, solo que para variar yo lo necesitaba hacer en php, asàque me dispuse a hacer una función utilizando el traductor de google.
Mi función utiliza el sistema de traducción de google para generar una traducción entre los lenguajes permitidos en el desplegable de google, pero a demás utiliza el ingles de puente para traducir en idiomas no contemplados por google. Las traducciones generadas son mas inexactas pero, es la única forma de hacerlo por el momento... esto quiere decir que por ejemplo, si queremos pasar una frase de español a francés la función realizará una consulta de español a ingles y con el resultado, realizará una segunda consulta de ingles a francés, dando este ultimo dato como resultado, lo que implica la carga de la funcion y que tardara mas que en una traducción normal..
-
function traducir($original, $origen = "en", $destino = "es", $retraducir = "no", $debug = ""){
-
"fr" => "1",
-
"en" => "1"),
-
"en" => "1",
-
"de" => "1"),
-
"de" => "1",
-
"ar" => "1",
-
"zh-CN" => "1",
-
"zh-TW" => "1",
-
"ko" => "1",
-
"es" => "1",
-
"fr" => "1",
-
"it" => "1",
-
"ja" => "1",
-
"pt" => "1",
-
"ru" => "1"),
-
);
-
if($conversiones_validas[$origen][$destino] == "1"){
-
$url .= '&langpair='.$origen.'|'.$destino.'&hl=es&ie=UTF8';
-
$exp_info = "!id=suggestion>(.+)</textarea>!U";
-
-
$resultado = $resultado[1][0];
-
if($resultado != ''){
-
if($debug == ""){
-
return array("original" => $original, "traduccion" => $resultado, "origen" => $origen, "destino" => $destino, "url" => $url);
-
} else {
-
return $resultado;
-
}
-
} else {
-
if($debug == ""){
-
return array("error" => "No se pudo traducir el texto <b>".$original."</b>. Compruebe que existe texto a traducir o que el sistema funciona aqui: http://translate.google.com/translate_t");
-
} else {
-
return false;
-
}
-
}
-
} else {
-
if($retraducir == "no"){
-
return false;
-
} else {
-
if($debug == ""){
-
} else {
-
return false;
-
}
-
} else {
-
$texto = traducir($original, $origen, "en", $retraducir);
-
$url .= '&langpair='.$origen.'|'.$destino.'&hl=es&ie=UTF8';
-
-
if($debug == ""){
-
return array("original" => $original, "traduccion" => $texto["traduccion"], "origen" => $origen, "destino" => $destino, "url" => $url);
-
} else {
-
return $resultado;
-
}
-
}
-
}
-
}
-
}
A demás esta función tiene un modo debug que nos dará como resultado el error producido si no se consigue la traducción o nos ofrecerá todos los datos internos si la traducción fue posible.
Ejemplo:
-
$texto = traducir("hola", "es", "en", "si", "si");
-
if($texto["error"] != ""){
-
} else {
-
echo "El texto <b>".$texto["original"]."</b> se ha traducido de ".$texto["origen"]." a ".$texto["destino"].", dando como resultado ".$texto["traduccion"].". URL de referencia : ".$texto["url"];
-
}
En modo normal la función nos da como resultado la cadena de texto traducida y si no es posible un valor boleano false.
Ejemplo:
-
$texto = traducir("hola", "es", "en", "si");
-
echo $texto;
-
}
Hola, està muy buena la funcion, pero me da error, cuando le paso un texto un poco largo para que tradusca.
Hola Gonzalo, eso es por que los datos se envÃan por GET y solo se puede enviar 255 caracteres en total como máximo..
tks! antares, entonces como puedo hacer para traducir textos de màs de 255 caracteres ?
Puedes probar a utilizar la API de google translate
tks!!
Me imagino que se puede tambien almacenar texto en variables, o usar información desde bases de datos, esa serÃa una opción para usar texto con más de 255 caracteres.
El único que permite la cantidad que se quiera es POST.
Un Saludo!
Desde hace un tiempo Google ha cambiado su herramienta de idioma y la clase no me funcionaba pero he hecho un apaño sustituyendo esto:
&langpair=’.$origen.’|’.$destino.’
por esto:
&sl=’.$origen.’&tl=’.$destino.’
y esto:
!id=suggestion>(.+)!U
por esto:
!id=suggestion .*>(.+)!U
Un saludo.