 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Vie 12 Jul, 2013 11:46 am Asunto: Traductor usando API de google o Bing |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 13 Jul, 2013 9:55 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 15 Jul, 2013 11:19 am Asunto: |
|
|
Leo,
Funciona de maravilla, que bueno, ahora a sacarle jugo a la funcion.
Muchas gracias.
Carlos _________________ Carlos J. Fernandez |
|
| Volver arriba |
|
 |
Dream Lt JG


Registrado: 14 Feb 2003Mensajes: 57Ubicación: TOLEDO
|
Publicado: Dom 28 Jul, 2013 5:13 pm Asunto: Me salta un error |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 28 Jul, 2013 8:45 pm Asunto: Re: Me salta un error |
|
|
| 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 |
|
 |
Dream Lt JG


Registrado: 14 Feb 2003Mensajes: 57Ubicación: TOLEDO
|
Publicado: Dom 28 Jul, 2013 9:34 pm Asunto: |
|
|
| Lo voy a probar, muchísimas gracias. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|