1
我正在使用Bing的API,更精確地說 - 翻譯部分,除了一件事情 - 自動檢測語言以外,它都工作得很好。這怎麼可能?如何非法使用Bing Translate API?
我的代碼工作正常,櫃面有人需要看:
function HTTPEncode(const AStr: string): string;
const
NoConversion = ['A'..'Z', 'a'..'z', '*', '@', '.', '_', '-'];
var
i: integer;
begin
Result := '';
for i := 1 to Length(AStr) do
begin
if CharInSet(AStr[i],NoConversion) then
Result := Result + AStr[i]
else
Result := Result + Format('%%%.2x',[ord(AStr[i])]);
end;
end;
function GetTranslation(text, fromLang, toLang: string): string;
var
xmldoc: TXMLDocument;
inode,mnode,rnode,irnode: IXMLNode;
j: integer;
uri: string;
idhttp:TIdHttp;
begin
Result := '';
idhttp:=TIdHttp.Create(nil);
xmldoc := TXMLDocument.Create(application);
try
xmldoc.LoadFromXML(idhttp.Get('http://api.search.live.net/xml.aspx?Appid=' + AppID + '&query='+HTTPEncode(text)+
'&sources=translation'+
'&Translation.SourceLanguage=' + fromLang +
'&Translation.TargetLanguage=' + toLang));
finally
idhttp.Free;
end;
try
inode := xmldoc.ChildNodes.FindNode('SearchResponse');
if Assigned(inode) then
begin
uri := 'http://schemas.microsoft.com/LiveSearch/2008/04/XML/translation';
mnode := inode.ChildNodes.FindNode('Translation',uri);
if Assigned(mnode) then
begin
rnode := mnode.ChildNodes.FindNode('Results',uri);
if Assigned(rnode) then
begin
irnode := rnode.ChildNodes.FindNode('TranslationResult',uri);
if Assigned(irnode) then
Result := irnode.ChildNodes.FindNode('TranslatedTerm',uri).NodeValue;
end;
end;
end;
finally
xmldoc.Free;
end;
end;
begin
ShowMessage(GetTranslation('Hello!','en','de'));
end;
我跟着從http://www.microsofttranslator.com/包使用自動檢測功能時,其結果是「自=;」而如果源語言是英語,它會是'from = en',我嘗試着發送''作爲源語言,但沒有成功 - 沒有結果。
如何使用自動檢測?
必應翻譯API的AppId現在已被棄用,並需要在標題中發送認證令牌...所以沒有JavaScript的愛,你將需要使用服務器應用程序。 – 2012-05-08 15:07:55
即使有''from =&to = {1}「'參數,它也不起作用(不再?)。 [docs](http://msdn.microsoft.com/en-us/library/ff512406.aspx)表示它仍然可以正常工作,但我沒有看到它。它清楚地*檢測到語言並正確地翻譯它,但它不會告訴你它被檢測爲源語言。 – rkrzr 2014-01-30 10:46:16