我正在使用Bing的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 =;'然而,如果源语言是英语,那么它就是'from = en;'。我试过发送''作为源语言,但它没有成功 - 没有结果。
如何使用自动检测?
答案 0 :(得分:1)
我使用他们的Ajax API做到了这一点。如果使用null“from”参数构建查询,则服务会自动检测语言。
这是我为服务发出请求格式的查询网址:
@"http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId={0}&from=&to={1}&text={2}"
关键是"from=&to={1}"
。
答案 1 :(得分:0)
以下是API版本3的示例:
from
参数detectedLanguage
产生en
score
的这一结果表示100%的把握
$ curl -X POST "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&textType=html&to=fr" \
-d "[{'Text':'Underbeds'}]"> -H "Ocp-Apim-Subscription-Key:YOUR_KEY_HERE" \
> -H "Ocp-Apim-Subscription-Region:global" \
> -H "Content-Type: application/json" \
> -d "[{'Text':'Underbeds'}]"
[{"detectedLanguage":{"language":"en","score":1.0},"translations":[{"text":"Sous-lits","to":"fr"}]}]