2009-11-22 68 views
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',我嘗試着發送''作爲源語言,但沒有成功 - 沒有結果。

如何使用自動檢測?

回答

1

我用他們的Ajax API做了這個。如果使用空「from」參數構建查詢,則該服務會自動檢測該語言。

這是查詢網址我格式化,使對服務的請求:

@"http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId={0}&from=&to={1}&text={2}" 

關鍵的事情是"from=&to={1}"

+0

必應翻譯API的AppId現在已被棄用,並需要在標題中發送認證令牌...所以沒有JavaScript的愛,你將需要使用服務器應用程序。 – 2012-05-08 15:07:55

+1

即使有''from =&to = {1}「'參數,它也不起作用(不再?)。 [docs](http://msdn.microsoft.com/en-us/library/ff512406.aspx)表示它仍然可以正常工作,但我沒有看到它。它清楚地*檢測到語言並正確地翻譯它,但它不會告訴你它被檢測爲源語言。 – rkrzr 2014-01-30 10:46:16