Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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, 166 visitas)

Última edición por roman fecha: 26-10-2010 a las 00:29:17.
Responder Con Cita
  #2  
Antiguo 27-10-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 23
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
  #3  
Antiguo 01-11-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 23
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
  #4  
Antiguo 24-11-2010
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
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
  #5  
Antiguo 25-11-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 23
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
  #6  
Antiguo 25-11-2010
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
aposi Va por buen camino
gracias, lo aplicare al programa
Responder Con Cita
  #7  
Antiguo 07-11-2011
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 15:53:40.


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