Microsoft Translator API を使用して中国語 (簡体字) から英語に翻訳しようとしています。
いくつかの要件
クエリが Microsoft の URI 制限である 15,845 文字を超えているため、クエリ文字列で
POST
はなく、HTTP メソッドを使用する必要があります(これは、漢字の場合は 10,000 文字の制限よりも少ない場合でも可能であることに注意してください。その理由は、GET
クエリ文字列は URL エンコードする必要があるため、長さが大幅に増加しますが、文字数が決定される前に Microsoft によってデコードされます。POST
sを許可する唯一の変換 HTTP メソッドTranslateArrayMethod
は です。たとえば、は sTranslateMethod
のみを許可しますGET
。残念ながら、 はTranslateArrayMethod
XML ドキュメントしか受け付けないため、XML を扱う必要があります。
以下は、送信する XML ドキュメントの例です。
<TranslateArrayRequest>
<AppId/>
<From>es</From>
<Options>
<ContentType xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2">text/plain</ContentType>
</Options>
<Texts>
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<![CDATA[Hola]]>
</string>
</Texts>
<To>en</To>
</TranslateArrayRequest>
これは正常に動作し、結果は次のとおりです。
<ArrayOfTranslateArrayResponse xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<TranslateArrayResponse>
<From>es</From>
<OriginalTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:int>4</a:int>
</OriginalTextSentenceLengths>
<TranslatedText>Hello</TranslatedText>
<TranslatedTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:int>5</a:int>
</TranslatedTextSentenceLengths>
</TranslateArrayResponse>
</ArrayOfTranslateArrayResponse>
ただし、次のように漢字を追加すると、次のようになります。
<TranslateArrayRequest>
<AppId/>
<From>zh-CHS</From>
<Options>
<ContentType xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2">text/plain</ContentType>
</Options>
<Texts>
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<![CDATA[南]]>
</string>
</Texts>
<To>en</To>
</TranslateArrayRequest>
私は奇妙な応答を受け取ります:
<html>
<body/>
<h1>System.Runtime.Serialization.SerializationException</h1>
<p>Message: There was an error deserializing the object of type Microsoft.MT.MDistributor.V2.TranslateArrayRequest. Unexpected end of file. Following elements are not closed: TranslateArrayRequest. Line 1, position 298.</p>
</html>
CDATA エスケープを使用しないことも試みましたが、役に立たないことに注意してください。From
言語を変更しても効果はありません。
私は Node.js (Javascript) を使用していますが、これは汎用 HTTP API であるため、問題ではないと思います。