Results 1 to 4 of 4

Thread: Google translation via Delphi code :)

  1. #1

    Google translation via Delphi code :)

    Hi all,
    After googling today I found the below link:

    http://delphiptt.blogspot.com/2006/0...om-delphi.html

    It allows you to make a request to the google translation engine to translate some text for you and return the translated version as a string using Delphi

    cheers,
    Paul

  2. #2
    Legendary Member NecroDOME's Avatar
    Join Date
    Mar 2004
    Location
    The Netherlands, Eindhoven
    Posts
    1,059

    Google translation via Delphi code :)

    Cool, now you can translate your game/story on the fly \o/
    (however it's still computer translation, so its still doesn't feel 'human')
    NecroSOFT - End of line -

  3. #3

    Google translation via Delphi code :)

    Could be fun to use in MMORPG.

  4. #4

    Google translation via Delphi code :)

    If anyone wants to use it, I have made a unit for doing the translation.

    It requires the Synapse internet classes (http://www.ararat.cz/synapse/doku.php).

    I had to change the search strings slightly because the translator was finding the original text instead of the translated version and returning that!!

    Code:
    Unit translator_unit;
    {$IFDEF FPC}
    {$MODE DELPHI} {$H+}
    {$ENDIF}
    Interface
    
    Const
    {..............................................................................}
    
    //    cLanguagePair_ = 0;
        cLanguagePair_EnglishToFrench  = 2;
        cLanguagePair_EnglishToGerman  = 3;
        cLanguagePair_EnglishToItalian = 4;
    //    cLanguagePair_ = 5;
    //    cLanguagePair_ = 6;
    //    cLanguagePair_ = 7;
    //    cLanguagePair_ = 8;
    //    cLanguagePair_ = 9;
    //    cLanguagePair_ = 10;
    //    cLanguagePair_ = 11;
    //    cLanguagePair_ = 12;
        cLanguagePair_ItalianToEnglish = 13;
    //    cLanguagePair_ = 14;
    //    cLanguagePair_ = 15;
    //    cLanguagePair_ = 16;
    //    cLanguagePair_ = 17;
    
        cLanguagePairList : Array[0..17] Of AnsiString =(
            'zh-CN%7Cen',
            'en%7Czh-CN',
            'en%7Cfr',
            'en%7Cde',
            'en%7Cit',
            'en%7Cja',
            'en%7Cko',
            'en%7Cpt',
            'en%7Ces',
            'fr%7Cen',
            'fr%7Cde',
            'de%7Cen',
            'de%7Cfr',
            'it%7Cen',
            'ja%7Cen',
            'ko%7Cen',
            'pt%7Cen',
            'es%7Cen'
        );
    {..............................................................................}
    
    {..............................................................................}
    Function  TranslateText(Const ATextIn        : AnsiString;
                            Var   ATextOut       : AnsiString;
                            Const ALanguagePair  : Integer) : Boolean;
                            
    Implementation
    
    Uses
        Classes,
        httpsend,
        SysUtils;
        
    {..............................................................................}
    
    {..............................................................................}
    Function  HTTPEncode(Const AStr : AnsiString) : AnsiString;
    Const
        cNoConversion = ['A'..'Z', 'a'..'z', '*', '@', '.', '_', '-'];
    Var
        Sp, Rp : PChar;
    Begin
        SetLength(Result, Length(AStr) * 3);
        Sp := PChar(AStr);
        Rp := PChar(Result);
        While Sp^ <> #0 Do
        Begin
            If Sp^ in cNoConversion Then
                Rp^ &#58;= Sp^
            Else
            If Sp^ = ' ' Then
                Rp^ &#58;= '+'
            Else
            Begin
                FormatBuf&#40;Rp^, 3, '%%%.2x', 6, &#91;Ord&#40;Sp^&#41;&#93;&#41;;
                Inc&#40;Rp, 2&#41;;
            End;
            Inc&#40;Rp&#41;;
            Inc&#40;Sp&#41;;
        End;
        SetLength&#40;Result, Rp - PChar&#40;Result&#41;&#41;;
    End;
    &#123;..............................................................................&#125;
    
    &#123;..............................................................................&#125;
    Function PosEx&#40;Const SubStr, S &#58; AnsiString; Offset &#58; Cardinal&#41; &#58; Integer;
    
    Var
        i &#58; PChar;
    Begin
        If &#40;offset <1> length&#40;s&#41;&#41; Then
        Begin
            Result &#58;= 0;
            Exit
        End;
    
        i &#58;= StrPos&#40;@s&#91;offset&#93;,@substr&#91;1&#93;&#41;;
        If i = Nil Then
            PosEx &#58;= 0
        Else
            PosEx &#58;= Succ&#40;i-PChar&#40;s&#41;&#41;;
    End;
    &#123;..............................................................................&#125;
    
    &#123;..............................................................................&#125;
    Function  TranslateText&#40;Const ATextIn        &#58; AnsiString;
                            Var   ATextOut       &#58; AnsiString;
                            Const ALanguagePair  &#58; Integer&#41; &#58; Boolean;
    Var
        SendTxt  &#58; AnsiString;
        Response &#58; TStringList;
        s        &#58; AnsiString;
        a,b      &#58; integer;
    Begin
          Result   &#58;= False;
          Response &#58;= TStringList.Create;
          Try
              SendTxt &#58;= 'http&#58;//translate.google.com/translate_t?text=' +
                         HTTPEncode&#40;ATextIn&#41; +
                         '&langpair=' +
                         cLanguagePairList&#91;ALanguagePair&#93;;
    
              If Not HttpGetText&#40;SendTxt,Response&#41; Then Exit;
              s &#58;= Response.Text;
              a &#58;= PosEx&#40;'>',s,Pos&#40;'id=suggestion>',s&#41;&#41;;
              b &#58;= PosEx&#40;'</textarea>',s,a&#41;;
              ATextOut &#58;= Copy&#40;s,a+1,b-a-1&#41;;
              Result &#58;= True;
          Finally
              Response.Free;
          End;
    End;
    &#123;..............................................................................&#125;
    
    &#123;..............................................................................&#125;
    End.
    It most likely won't work on languages that have UniCode characters that are
    not ascii 8 bit in them due to it using normal strings, but it works ok for
    the others

    I have also included some constants for the language from-to pairs (a few of them, not all)

    enjoy
    cheers,
    Paul

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •