carta texteditA 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..

PHP:
  1. function traducir($original, $origen = "en", $destino = "es", $retraducir = "no", $debug = ""){
  2.     $conversiones_validas = array(
  3.         "de"    => array(
  4.                     "fr" => "1",
  5.                     "en" => "1"),
  6.         "ar"    => array("en" => "1"),
  7.         "zh"    => array("en" => "1"),//
  8.         "zh-CN" => array("zh-TW" => "1"),
  9.         "zh-TW" => array("zh-CN" => "1"),
  10.         "ko"    => array("en" => "1"),
  11.         "es"    => array("en" => "1"),
  12.         "fr"    => array(
  13.                     "en" => "1",
  14.                     "de" => "1"),
  15.         "en"    => array(
  16.                     "de" => "1",
  17.                     "ar" => "1",
  18.                     "zh-CN" => "1",
  19.                     "zh-TW" => "1",
  20.                     "ko" => "1",
  21.                     "es" => "1",
  22.                     "fr" => "1",
  23.                     "it" => "1",
  24.                     "ja" => "1",
  25.                     "pt" => "1",
  26.                     "ru" => "1"),
  27.         "it"    => array("en" => "1"),
  28.         "ja"    => array("en" => "1"),
  29.         "pt"    => array("en" => "1"),
  30.         "ru"    => array("en" => "1")
  31.     );
  32.     if($conversiones_validas[$origen][$destino] == "1"){
  33.         $url        = "http://translate.google.com/translate_t?text=".urlencode(utf8_encode($original));
  34.         $url       .= '&langpair='.$origen.'|'.$destino.'&hl=es&ie=UTF8';
  35.         $texto    = @file($url);
  36.         $html      = implode('', $texto);
  37.         $exp_info   = "!id=suggestion>(.+)</textarea>!U";
  38.    
  39.         preg_match_all($exp_info, $html, $resultado);
  40.         $resultado = $resultado[1][0];
  41.         if($resultado != ''){
  42.             if($debug == ""){
  43.                 return array("original" => $original, "traduccion" => $resultado, "origen" => $origen, "destino" => $destino, "url" => $url);
  44.             } else {
  45.                 return $resultado;
  46.             }
  47.         } else {
  48.             if($debug == ""){
  49.                 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");
  50.             } else {
  51.                 return false;
  52.             }
  53.         }
  54.     } else {
  55.         if($retraducir == "no"){
  56.             return false;
  57.         } else {
  58.             if(strtolower($origen) == strtolower($destino)){
  59.                 if($debug == ""){
  60.                     return array("error" => "El idioma de origen y destino son el mismo");
  61.                 } else {
  62.                     return false;
  63.                 }
  64.             } else {
  65.                 $texto = traducir($original, $origen, "en", $retraducir);
  66.                 $texto = traducir(strtolower($texto["traduccion"]), "en", $destino, $retraducir);
  67.                 $url  = "http://translate.google.com/translate_t?text=".urlencode(utf8_encode($original));
  68.                 $url .= '&langpair='.$origen.'|'.$destino.'&hl=es&ie=UTF8';
  69.            
  70.                 if($debug == ""){
  71.                     return array("original" => $original, "traduccion" => $texto["traduccion"], "origen" => $origen, "destino" => $destino, "url" => $url);
  72.                 } else {
  73.                     return $resultado;
  74.                 }
  75.             }
  76.         }
  77.     }
  78. }

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:

PHP:
  1. $texto = traducir("hola", "es", "en", "si", "si");
  2. if($texto["error"] != ""){
  3.     echo $texto["error"];
  4. } else {
  5.     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"];
  6. }

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:

PHP:
  1. $texto = traducir("hola", "es", "en", "si");
  2. echo $texto;
  3. }