Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-03-2009
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
traducir texto de español a ingles desde un programa delphi

hola foro como andan espero que bien bueno tengo una pequeña duda y es como hago para traducir un linea de texto del español al ingles desde un programa delphi existen algunos componentes que hagan esto saludos desde ya gulder-gan
Responder Con Cita
  #2  
Antiguo 25-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo primero que se me ocurre, aunque no sé si es viable, es usar INDY para comunicarme con el traductor de Google, examinar la respuesta y pegarla en la aplicación. Así, además, podrías traducir en varios idiomas.

// Saludos
Responder Con Cita
  #3  
Antiguo 25-03-2009
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
gracias roman por tu respuesta y una pregunta como hago eso si no es mucho pedir por que no se nada de las yndi jaja saludos
Responder Con Cita
  #4  
Antiguo 25-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Lo primero que se me ocurre, aunque no sé si es viable, es usar INDY para comunicarme con el traductor de Google, examinar la respuesta y pegarla en la aplicación. Así, además, podrías traducir en varios idiomas.
Hola, amiguito como se hace eso, nos puedes indicar por favor .

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 26-03-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
bueno revisando un poco el traductor me pude dar cuenta de esto:

Código:
http://translate.google.com.mx/translate_t#es|en|este%20es%20el%20texto%20a%20traducir
esta es la forma de llamar al traductor y este es el codigo del campo del resultado

Código:
<div style="text-align: left;" id="result_box" dir="ltr">This is the text to be translated</div>
Me imagino que con las indy y el objeto idhttp algo se podra hacer ahi
Responder Con Cita
  #6  
Antiguo 26-03-2009
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Thumbs up

Cita:
Empezado por Caro Ver Mensaje
Hola, amiguito como se hace eso, nos puedes indicar por favor .

Saluditos
opino lo mismo enseñanos salu2
Responder Con Cita
  #7  
Antiguo 26-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ya Kipow lo analizó, yo sólo les pongo un ejemplito listo para ejecutar. La función que usa es un poco artesanal:

Código Delphi [-]
function GoogleTranslate(SourceLanguage, TargetLanguage, Text: String): String;
const
  GoogleUrl = 'http://translate.google.com.mx/translate_t';
  StartTag = '<div id=result_box dir="ltr">';
  EndTag = '</div>';

var
  IdHTTP: TIdHTTP;
  Fields: TStrings;
  Response: String;
  I: Integer;

begin
  IdHTTP := nil;
  Fields := nil;

  try
    IdHTTP := TIdHTTP.Create(nil);
    Fields := TStringList.Create;

    (* Asignar parámetros *)
    Fields.Values['sl'] := SourceLanguage;
    Fields.Values['tl'] := TargetLanguage;
    Fields.Values['text'] := Text;

    (* Invocar al traductor *)
    Response := IdHTTP.Post(GoogleUrl, Fields);

    (* Buscar el comienzo de la cadena traducida *)
    I := Pos(StartTag, Response);
    Delete(Response, 1, I + Length(StartTag) - 1);

    (* Buscar el final de la cadena traducida *)
    I := Pos(EndTag, Response);
    Response := Copy(Response, 1, I - 1);

    Result := Response;
  finally
    IdHTTP.Free;
    Fields.Free;
  end;
end;

Quizá sería más adecuado utilizar un analizador del documento HTML. De hecho probé con éste y funciona bien pero pensé que podíamos hhacerlo con sólo lo estándar.

Ya queda en ustedes generalizar la aplicación de ejemplo para que se puedan escoger los idiomas de la traducción.

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip GTranslator.zip (484,6 KB, 100 visitas)
Responder Con Cita
  #8  
Antiguo 26-03-2009
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Thumbs up

roman gracias men probando mañana comento aca es un poco tarde y me toca temprano saludes gulder
Responder Con Cita
  #9  
Antiguo 26-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchísimas gracias Roman y Kipow, funciona bien tu ejemplo Roman, creo que tengo que estudiar sobre el TIdHttp, pero si he entendido el codigo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 26-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Ya queda en ustedes generalizar la aplicación de ejemplo para que se puedan escoger los idiomas de la traducción.
Hola de nuevo, acabo de hacer una pruebita para que funcionen con los demas idiomas y funciona perfecto, muchas gracias de nuevo Roman.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #11  
Antiguo 26-03-2009
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Thumbs up

roman gracias roman funciona 100% exelecte jijiji salu2
Responder Con Cita
  #12  
Antiguo 26-03-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Muchas gracias por el ejemplo Roman, bueno al menos la idea la tenia jaja. vamos a meternos un poco mas en las indy ya veo que se les puede sacar bastante el jugo.
Responder Con Cita
  #13  
Antiguo 26-10-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Gracias a la ayuda de movorack en este hilo he actualizado este ejemplo para que sea más afín con la API de Google y no dependa de las etiquetas HTML exactas de la página de Google, pues, como puede verse ahora, el primer ejemplo ya no funciona debido a que éstas cambiaron.

Aproveché para hacer el ejemplo un poco más versátil



permitiendo al usuario escoger los idiomas de la traducción.

En esta versión, anexo el archivo languages.ini con la lista de lenguajes entre los que puede traducirse (o casi).

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip gTranslator2.zip (497,2 KB, 165 visitas)

Última edición por roman fecha: 26-10-2010 a las 00:29:17.
Responder Con Cita
  #14  
Antiguo 27-10-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 21
rrf Va por buen camino
Smile

Muchííííííísimas gracias, Román.

Había consultado ESTE OTRO HILO, pero no funcionaba y la solución que has aportado se ajusta a lo que buscaba.

Salu2
Responder Con Cita
  #15  
Antiguo 01-11-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 21
rrf Va por buen camino
Question

Todo sigue bien y la función Googletranslate me ha dado muy buen resultado.

Sin embargo, hay un detalle que quizás podría ser mejorado.

En el ejemplo que añadió Roman, cuando se quiere traducir:

Código:
This is the line 1.

This is the line 3.

This is the line 5.
El resultado que aparece es:

Código:
Esta es la línea 1. Esta es la línea 3. Esta es la línea 5.
Sin embargo, si se copia el texto desde un memo y se pega en la página del traductor de Google, el resultado es:

Código:
Esta es la línea 1.

Esta es la línea 3.

Esta es la línea 5.
¿Alguien conoce algún truco para utilizar esta función, pero haciendo que el traductor de Google, respete las líneas cuando devuelve el texto traducido?.

Muchas gracias de antemano.

Saludos.
Responder Con Cita
  #16  
Antiguo 24-11-2010
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Alguien sabe com hacer para que el traductor pueda traducir :

"Save" por "Guardar" en vez de

\u0026quot;Guardar\u0026quot;
Responder Con Cita
  #17  
Antiguo 25-11-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 21
rrf Va por buen camino
Wink

Hola Aposi.

Aquí te incluyo una función que elaboré para resolver el problema de las comillas dobles y de algunos otros caracteres ( ' < > =).


Código Delphi [-]
Function rt ( bb: string ) : string ;
var
  a1  : string ;
  d1, d2 : array [1..5] of String ;
  cc : integer ;
begin

      // Reemplaza caracteres especiales mal traducidos
      //-------------------------------------------------

  a1 := bb ;
  d1 [1] := '\u0026#39;' ;       d2 [1] := '''' ;   // Comilla simple: '
  d1 [2] := '\u0026gt;' ;        d2 [2] := '>' ;
  d1 [3] := '\u0026lt;' ;        d2 [3] := '<' ;
  d1 [4] := '\u003d' ;           d2 [4] := '=' ;
  d1 [5] := '\u0026quot;' ;      d2 [5] := '"' ;   // Comilla doble: "

  for cc := 1 to 5 do
    if 0 < pos ( d1 [cc], a1 )
      then a1 := StringReplace( a1, d1 [cc], d2 [cc], [ rfReplaceAll ] ) ;

  result := a1 ;

end;

En la función, se usaron Array para que fuera fácil ampliar el número de caracteres que queden mal traducidos. Están incluidos los que a mí me dieron problemas, pero seguramente deben haber muchos más; por ejemplo "¿" o "¡" posiblemente den problemas.

Para llamar a esta función, sería algo así (aa es una variable tipo string):

Código Delphi [-]
  aa := 'Texto a traducir usando Google Translator' ;
  aa := GoogleTranslate(Source, Target, aa) ;

              // Eliminar caracteres especiales mal traducidos
  aa := rt ( aa ) ;

Puedes usar solo la parte que te interese de este código y, con un par de ajustes, lo tienes resuelto.

Saludos.

Última edición por rrf fecha: 25-11-2010 a las 17:00:19.
Responder Con Cita
  #18  
Antiguo 25-11-2010
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
gracias, lo aplicare al programa
Responder Con Cita
  #19  
Antiguo 07-11-2011
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
hola de nuevo,
google ha cerrado la api del traductor y he encontrado que microsoft tinen tambien una api.
he encontrado el siguiente codigo para utilizar esta api

Código Delphi [-]
 const    
 MicrosoftTranslatorTranslateUri = 'http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=%s&text=%s&from=%s&to=%s';
        //this AppId if for demo only please be nice and use your own , it's easy get one from here http://msdn.microsoft.com/en-us/library/ff512386.aspx    
BingAppId                       = '7FA9D0A8FB6B194BE57E92B286FCAF0B774883F3';
    Msxml2_DOMDocument              = 'Msxml2.DOMDocument.6.0';   


function TDML.TranslateText(const AText, SourceLng, DestLng: string): string;
var
   XmlDoc : OleVariant;
   Node   : OleVariant;
begin
  Result:=WinInet_HttpGet(Format(MicrosoftTranslatorTranslateUri,[BingAppId,AText,SourceLng,DestLng]));
  XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
  try
    XmlDoc.Async := False;
    XmlDoc.LoadXML(Result);
    if (XmlDoc.parseError.errorCode <> 0) then
     raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
    Node:= XmlDoc.documentElement;
    if not VarIsClear(Node) then
     Result:=XmlDoc.Text;
  finally
     XmlDoc:=Unassigned;
  end;

end;

procedure TDML.WinInet_HttpGet2(const Url: string; Stream: TStream);
const
BuffSize = 1024*1024;
var
  hInter   : HINTERNET;
  UrlHandle: HINTERNET;
  BytesRead: Longword;
  Buffer   : Pointer;
begin
  hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(hInter) then
    try
      Stream.Seek(0,0);
      GetMem(Buffer,BuffSize);
      try
          UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
          if Assigned(UrlHandle) then
          begin
            repeat
              InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead);
              if BytesRead>0 then
               Stream.WriteBuffer(Buffer^,BytesRead);
            until BytesRead = 0;
            InternetCloseHandle(UrlHandle);
          end;
      finally
        FreeMem(Buffer);
      end;
    finally
     InternetCloseHandle(hInter);
    end;

end;

function TDML.WinInet_HttpGet(const Url: string): string;
Var
  StringStream : TStringStream;
begin
  Result:='';
    StringStream:=TStringStream.Create('');
    try
        WinInet_HttpGet2(Url,StringStream);
        if StringStream.Size>0 then
        begin
          StringStream.Seek(0,0);
          Result:=StringStream.ReadString(StringStream.Size);
        end;
    finally
      StringStream.Free;
    end;

end;

el probela que tengo es que estoy trabajando con delphi 6 y en el codigo que encontre utiliza la siguiente declaración :

Código Delphi [-]
StringStream:=TStringStream.Create('',TEncoding.UTF8);


esto no funciona con mi delphi y no se como passar a UTF8 el resultado de la traducción

Última edición por aposi fecha: 07-11-2011 a las 12:07:04.
Responder Con Cita
  #20  
Antiguo 04-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por marisbelly Ver Mensaje
...
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración


Ya has hecho la pregunta en otro hilo y se está tratando, no repitas lo mismo en otros.
Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Está la interfaz de Delphi disponible en español? natalia OOP 19 22-04-2007 00:32:17
Traducir al Ingles omy Varios 3 22-11-2006 05:49:07
Ejecutar un programa externo desde un programa de Delphi Roger_Fernandez Varios 3 02-09-2004 18:05:36
Traducir texto a voz Jose Manuel API de Windows 1 27-04-2004 22:37:28
Traducir Un chat que está en Inglés Luis F. Orjuela Internet 2 26-02-2004 01:55:03


La franja horaria es GMT +2. Ahora son las 07:28:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi