2009-11-22 3 views
1

Я использую API Bing, точнее - часть перевода, и все это работает хорошо, кроме одного - автоматическое определение языка. Как это возможно?Как правильно использовать 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

Я сделал это, используя их API Ajax. Если вы создаете свой запрос с помощью нулевого параметра «from», служба автоматически определяет язык.

Это URL запроса я форматировать, чтобы сделать запросы на обслуживание:

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

Ключ вещь быть "from=&to={1}".

+0

AppId API-интерфейса Bing теперь устарел и нуждается в токенах аутентификации, отправленных в заголовках ... поэтому никакой Javascript не нравится там, вам нужно будет использовать для этого серверное приложение. –

+1

Даже с параметром '' from = & to = {1} "' он не работает (больше?). В [docs] (http://msdn.microsoft.com/en-us/library/ff512406.aspx) указано, что он все равно должен работать, но я этого не вижу. Он четко * * определяет язык и правильно его переводит, но он не говорит вам, что он обнаружил как исходный язык. – rkrzr

Смежные вопросы