Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Traductor usando API de google o Bing

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Traductor usando API de google o Bing Responder citando

Hola a todos,

Estoy buscando como usar el API de google para traducir y despues de buscar mucho y hacer pruebas me doy cuenta que desde hace poco es de pago y por eso no funciona, tambien estoy viendo el API de Bing pero parece más complicado.

Dando vueltas he encontrado una gente que ha conseguido hacer funcioner el de Google pero está el codigo en PHP, alguien sabe algo de PHP? para ver si puede traductirlo a C++?

Os lo dejo para ver si tenemos algun fiera en PHP que pueda hacerlo.

//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)) $descripcion .= $procesado . " ";
}

return trim($descripcion);
}

//Traduce las descripciones a otros idiomas
function traduce($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";
$ingles = traductor($url);
//Traducimos de Español a alemán
$url = "http://translate.google.es/translate_a/t?client=t&text=$descripcion&hl=es&sl=es&tl=de&ie=UTF-8&oe=UTF-8&multires=1&prev=btn&ssel=0&tsel=4";
$aleman = traductor($url);
//Traducimos de Español a ruso
$url = "http://translate.google.es/translate_a/t?client=t&text=$descripcion&hl=es&sl=es&tl=ru&ie=UTF-8&oe=UTF-8&multires=1&prev=conf&psl=es&ptl=de&otf=2&it=sel.449408%2Ctgtd.7679&ssel=0&tsel=4";
$ruso = traductor($url);
//Traducimos de Español a chino
$url = "http://translate.google.es/translate_a/t?client=t&text=$descripcion&hl=es&sl=es&tl=zh-CN&ie=UTF-8&oe=UTF-8&multires=1&prev=conf&psl=es&ptl=zh-TW&otf=2&it=sel.5752%2Ctgtd.2438&ssel=0&tsel=4";
$chino = traductor($url);
//Guardamos el resultado
...
}

Tambien podeis verlo aqui.

http://www.artprojectgroup.es/alternativa-gratuita-a-la-api-de-google-translate

Un abrazo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Es sencillo, el lio está en parsear la salida, pero así en plan rápido:

- Añadimos un TIdHTTP (pestaña: "Indy Clients"):

C++Builder 2010 (y supongo que todas que soporten Unicode)
Código:
String text = "Esto es una prueba\r\nOtra prueba";
String lngIn = "auto";
String lngOut = "en";

String traduccion = "";
String str = TIdURI::ParamsEncode(text);
String textOut = IdHTTP1->Get("http://translate.google.es"
    "/translate_a/t?client=t&hl=es&sl=" + lngIn + "&tl=" + lngOut +
    "&ie=UTF-8&oe=UTF-8&multires=1&otf=2&ssel=0&tsel=3&text=" + str);

int ini=textOut.Pos("[[\""), fin=textOut.Pos("\"]],");
textOut = textOut.SubString(ini + 1, fin - ini + 1);

ini=textOut.Pos("[\"");  fin=textOut.Pos("\",\"");
while (ini && fin)
{
    String l = textOut.SubString(ini + 2, fin - (ini + 2));
    l = StringReplace(l, "\\r\\n", "\r\n", TReplaceFlags() << rfReplaceAll);
    traduccion += l;
    textOut.Delete(1, textOut.Pos("\"]") + 2);
    ini=textOut.Pos("[\"");  fin=textOut.Pos("\",\"");
}

ShowMessage(traduccion);

C++Builder 6
Código:
String text = "Esto es una prueba";
String lngIn = "auto";
String lngOut = "en";

String traduccion = "";

UTF8String str = TIdURI::ParamsEncode(__classid(TIdURI), UTF8Encode(text));
AnsiString textOut = UTF8Decode(IdHTTP1->Get("http://translate.google.es"
    "/translate_a/t?client=t&hl=es&sl=" + lngIn + "&tl=" + lngOut +
    "&ie=UTF-8&oe=UTF-8&multires=1&otf=2&ssel=0&tsel=3&text=" + str));

int ini=textOut.Pos("[[\""), fin=textOut.Pos("\"]],");
textOut = textOut.SubString(ini + 1, fin - ini + 1);

ini=textOut.Pos("[\"");  fin=textOut.Pos("\",\"");
while (ini && fin)
{
    String l = textOut.SubString(ini + 2, fin - (ini + 2));
    l = StringReplace(l, "\\r\\n", "\r\n", TReplaceFlags() << rfReplaceAll);
    traduccion += l;
    textOut.Delete(1, textOut.Pos("\"]") + 2);
    ini=textOut.Pos("[\"");  fin=textOut.Pos("\",\"");
}

ShowMessage(traduccion);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Leo,

Funciona de maravilla, que bueno, ahora a sacarle jugo a la funcion.

Muchas gracias.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Me salta un error Responder citando

Buenas tardes,

Lo primero es agradeceros la ayuda que me podais prestar.

Cuando compilo el codigo para builder 6, me da error;

Undefined symbol ParamsEncode

He estado buscando por el foro y en google, y no he visto nada.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Re: Me salta un error Responder citando

Dream escribió:
Cuando compilo el codigo para builder 6, me da error;

Undefined symbol ParamsEncode

Seguramente porque estas usando la versión de Indy que viene por defecto en el BCB6, o sea, la 8 (siempre se me olvida mencionarlo porque instale la 9 hace siglos).

Puedes usar la siguiente función para sustituirla:
Código:
String ParamsEncode(String str)
{
    String ret = "";
    for (int i = 1; i <= str.Length(); ++i)
    {
        if (str[i] == ' ')
            ret += '+';
        else if (!isalnum(str[i]))
            ret += "%" + IntToHex((UCHAR)str[i], 2);
        else
            ret += str[i];
    }
    return ret;
}

Y cambia la línea:
Código:
UTF8String str = TIdURI::ParamsEncode(__classid(TIdURI), UTF8Encode(text));

por:
Código:
UTF8String str = ParamsEncode(UTF8Encode(text));
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Lo voy a probar, muchísimas gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Leo,

He encontrado esto para hacerlo por BING por que ahora con Google parece que si haces muchas peticiones te lo corta.

http://www.extremadura-web.es/Blog/2012/02/28/utilizar-el-api-de-traduccion-bing-translator-en-asp-net/

Pero no consigo hacerlo funcionar, he probado dándome de alta y todo, puedes mirarlo a ver si lo consigues?

Un abrazo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.