Я использую 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;». Я попробовал, посылая «как исходный язык», но это не сработало - результата нет.
Как использовать автоматическое обнаружение?
AppId API-интерфейса Bing теперь устарел и нуждается в токенах аутентификации, отправленных в заголовках ... поэтому никакой Javascript не нравится там, вам нужно будет использовать для этого серверное приложение. –
Даже с параметром '' from = & to = {1} "' он не работает (больше?). В [docs] (http://msdn.microsoft.com/en-us/library/ff512406.aspx) указано, что он все равно должен работать, но я этого не вижу. Он четко * * определяет язык и правильно его переводит, но он не говорит вам, что он обнаружил как исходный язык. – rkrzr