我一直在尋找年齡現在的一些代碼,可以將任何語言翻譯到另一個,但沒有我找到的代碼的作品。
我知道谷歌有一個很好的翻譯API,但我無法讓任何人的Delphi代碼工作。
總會出現一個錯誤。 任何幫助將不勝感激,我需要一個程序,可以儘快翻譯我的最終學校項目。在德爾福翻譯語言
在德爾福翻譯語言
回答
也許你沒有找到Marco Cantu的作品? Works with REST/AJAX/Delphi
但是正如RRUZ所言,Google Translate API僅作爲付費服務提供。
謝謝,這段代碼看起來非常有希望,超過谷歌翻譯。給予的EXE作品100%在我的電腦上,但當我打開代碼,並嘗試編譯我得到一個錯誤,我想我錯過了一個單位。它告訴我,在「TIdUri.ParamsEncode(strIn)」中,ParamsEncode是一個未聲明的標識符。而且它對後來出現的「PosEx」也有同樣的說法。 –
謝謝,我剛剛安裝了Delphi 7,此代碼完美工作。它比谷歌的API更容易:) –
@MichaelMcQuirk,要小心,因爲marco cantu頁面中列出的項目使用舊版本的Google語言API系列,不推薦使用。 – RRUZ
Google Translate API是一個不錯的選擇,但現在只能作爲付費服務使用。相反,您可以嘗試使用Microsoft Translator V2 API,查看此文章Using the Microsoft Translator V2 API from delphi
以瞭解有關如何使用此API的更多詳細信息。
UPDATE 這是修改爲與您的delphi版本兼容的文章的相同演示項目。
program MicrosoftTranslatorApi;
{$APPTYPE CONSOLE}
uses
ShellApi,
ActiveX,
Classes,
ComObj,
Variants,
Windows,
WinInet,
SysUtils;
const
MicrosoftTranslatorTranslateUri = 'http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=%s&text=%s&from=%s&to=%s';
MicrosoftTranslatorDetectUri = 'http://api.microsofttranslator.com/v2/Http.svc/Detect?appId=%s&text=%s';
MicrosoftTranslatorGetLngUri = 'http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForTranslate?appId=%s';
MicrosoftTranslatorGetSpkUri = 'http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForSpeak?appId=%s';
MicrosoftTranslatorSpeakUri = 'http://api.microsofttranslator.com/v2/Http.svc/Speak?appId=%s&text=%s&language=%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 = '73C8F474CA4D1202AD60747126813B731199ECEA';
Msxml2_DOMDocument = 'Msxml2.DOMDocument.6.0';
procedure WinInet_HttpGet(const Url: string;Stream:TStream);overload;
const
BuffSize = 1024*1024;
var
hInter : HINTERNET;
UrlHandle: HINTERNET;
BytesRead: DWORD;
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 WinInet_HttpGet(const Url: string): string;overload;
Var
StringStream : TStringStream;
begin
Result:='';
StringStream:=TStringStream.Create('');
try
WinInet_HttpGet(Url,StringStream);
if StringStream.Size>0 then
begin
StringStream.Seek(0,0);
Result:=StringStream.ReadString(StringStream.Size);
end;
finally
StringStream.Free;
end;
end;
function 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;
function DetectLanguage(const AText:string):string;
var
XmlDoc : OleVariant;
Node : OleVariant;
begin
Result:=WinInet_HttpGet(Format(MicrosoftTranslatorDetectUri,[BingAppId,AText]));
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;
function GetLanguagesForTranslate: TStringList;
var
XmlDoc : OleVariant;
Node : OleVariant;
Nodes : OleVariant;
lNodes : Integer;
i : Integer;
sValue : string;
begin
Result:=TStringList.Create;
sValue:=WinInet_HttpGet(Format(MicrosoftTranslatorGetLngUri,[BingAppId]));
XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
try
XmlDoc.Async := False;
XmlDoc.LoadXML(sValue);
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node:= XmlDoc.documentElement;
if not VarIsClear(Node) then
begin
Nodes := Node.childNodes;
if not VarIsClear(Nodes) then
begin
lNodes:= Nodes.Length;
for i:=0 to lNodes-1 do
Result.Add(Nodes.Item(i).Text);
end;
end;
finally
XmlDoc:=Unassigned;
end;
end;
function GetLanguagesForSpeak: TStringList;
var
XmlDoc : OleVariant;
Node : OleVariant;
Nodes : OleVariant;
lNodes : Integer;
i : Integer;
sValue : string;
begin
Result:=TStringList.Create;
sValue:=WinInet_HttpGet(Format(MicrosoftTranslatorGetSpkUri,[BingAppId]));
XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
try
XmlDoc.Async := False;
XmlDoc.LoadXML(sValue);
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node:= XmlDoc.documentElement;
if not VarIsClear(Node) then
begin
Nodes := Node.childNodes;
if not VarIsClear(Nodes) then
begin
lNodes:= Nodes.Length;
for i:=0 to lNodes-1 do
Result.Add(Nodes.Item(i).Text);
end;
end;
finally
XmlDoc:=Unassigned;
end;
end;
procedure Speak(const FileName,AText,Lng:string);
var
Stream : TFileStream;
begin
Stream:=TFileStream.Create(FileName,fmCreate);
try
WinInet_HttpGet(Format(MicrosoftTranslatorSpeakUri,[BingAppId,AText,Lng]),Stream);
finally
Stream.Free;
end;
end;
var
lng : TStringList;
i : Integer;
FileName : string;
begin
try
CoInitialize(nil);
try
Writeln(TranslateText('Hello World','en','es'));
Writeln(DetectLanguage('Hello World'));
Writeln('Languages for translate supported');
lng:=GetLanguagesForTranslate;
try
for i:=0 to lng.Count-1 do
Writeln(lng[i]);
finally
lng.free;
end;
Writeln('Languages for speak supported');
lng:=GetLanguagesForSpeak;
try
for i:=0 to lng.Count-1 do
Writeln(lng[i]);
finally
lng.free;
end;
FileName:=ExtractFilePath(ParamStr(0))+'Demo.wav';
Speak(FileName,'This is a demo using the Microsoft Translator Api from delphi, enjoy','en');
ShellExecute(0, 'open', PChar(FileName),nil,nil, SW_SHOWNORMAL) ;
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
+1爲您的文章 – RBA
好吧,對於所有那些想要我收到的錯誤的例子,這裏是一個案例,我得到了2個錯誤。 (我指的是http://theroadtodelphi.wordpress.com/2011/05/30/using-the-microsoft-translator-v2-from-delphi/)我嘗試這段代碼時遇到的第一個錯誤是類文件「Generics.Collections」不存在。我有一個網站googling,允許你下載.pas文件,但我找不到任何。第二個錯誤我得到,我認爲我得到它,因爲第一個錯誤,是在64行(完整的代碼在頁面底部)我得到一個錯誤,說有很多實際參數。 –
(續)顯然,編譯器不知道TEncoding.UTF8是什麼。我假設它必須在缺少的「Generics.Collections」文件中。 –
首先,你找不到一個從一種語言翻譯到另一種語言的100%的工具。你可以有一個工具爲你做一些(或多或少)工作,但是你需要「擦亮」剩下的工作。正如RRUZ所說,你可以使用微軟的翻譯器,但我所說的也適用於這種情況。任何這種類型的工具都會花費你的錢。谷歌的翻譯很不錯,但你需要付出代價。
PS:我不認爲他們在學校要求你創建一個從任何語言翻譯成任何語言的工具。也許一個小工具可以證明你有這個概念。只是我的2美分...
嗯,實際上我的項目是我需要製作一個程序,可以教會它的用戶一種新的語言。使用谷歌翻譯的API只是該程序的一小部分(但非常重要)。大部分項目已經完成,我只需要一種翻譯文本的方法。 –
- 1. C#德爾福翻譯/轉換器
- 2. 語言翻譯
- 3. 德爾福HID Delphi7和德爾福XE2
- 4. 德爾福v.Word - 如何從德爾福
- 5. 德爾福2006用一個單一的ansi代碼頁翻譯/法語/荷蘭語/德語
- 6. 在C語言什麼是FTEll()相當於德爾福
- 7. 德爾福。顯示得到idHTTP.Get Unicode文本在多語言Windows
- 8. 德爾福在Vista
- 9. 在德爾福7
- 10. django語言翻譯
- 11. 語言翻譯API
- 12. Austronesian語言翻譯
- 13. Zend_Date語言翻譯
- 14. DES_KEY_SZ德爾福
- 15. 德爾福Application.HintColor
- 16. 德爾福
- 17. 德爾福
- 18. 與德爾福
- 19. 德爾福
- 20. 德爾福:TRegExpr
- 21. 類德爾福
- 22. 將mongoid翻譯成德語
- 23. Django的翻譯:如何翻譯語言
- 24. 德爾福dfm壞的編譯器
- 25. 德爾福7編譯越來越慢?
- 26. 德爾福2009年編譯包
- 27. 多項目條件編譯德爾福
- 28. 德爾福命令行編譯器
- 29. 德爾福dcc32和清單編譯
- 30. 驗證ISO 639-2語言代碼 - 德爾福
您能告訴我們您到目前爲止的狀況嗎?我們可以幫助您解決問題。我們不想爲你做你的學校項目。 –
我認爲你應該澄清你的問題。國際海事組織,您正在尋找通過調用webservice,DLL或其他API來執行翻譯來執行翻譯的代碼。 「可以將任何語言翻譯成另一種語言的代碼」可能需要語言學博士學位以及高級CS技能。 –