次の方法で共有


Translator API を使用したテキスト翻訳

Microsoft Translator API を使用して、REST API を介して音声とテキストを翻訳できます。 この記事では、Microsoft Translator Text API を使用して、Xamarin.Forms アプリケーション内のテキストをある言語から別の言語に翻訳する方法について説明します。

概要

Translator API には、次の 2 つのコンポーネントがあります。

  • ある言語のテキストを別の言語のテキストに翻訳するためのテキスト翻訳 REST API。 この API では、送信されたテキストの翻訳前に、その言語を自動的に検出します。
  • ある言語の音声を別の言語のテキストに文字起こしするための音声翻訳 REST API。 この API では、翻訳されたテキストを読み上げるテキスト読み上げ機能も統合されています。

この記事では、Translator Text API を使用して、言語間でのテキストの翻訳に重点を置いています。

Note

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Translator Text API を使用するには、API キーを取得する必要があります。 これは、Microsoft Translator Text API にサインアップする方法に関する記事で取得できます。

Microsoft Translator Text API の詳細については、Translator Text API のドキュメントを参照してください。

認証

Translator Text API に対して行われるすべての要求には JSON Web Token (JWT) アクセス トークンが必要です。これは、https://api.cognitive.microsoft.com/sts/v1.0/issueToken で Cognitive Services トークン サービスから取得できます。 トークンを取得するには、トークン サービスに POST 要求を行い、値として API キーを含む Ocp-Apim-Subscription-Key ヘッダーを指定します。

次のコード例は、トークン サービスに対してアクセス トークンを要求する方法を示しています。

public AuthenticationService(string apiKey)
{
    subscriptionKey = apiKey;
    httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", apiKey);
}
...
async Task<string> FetchTokenAsync(string fetchUri)
{
    UriBuilder uriBuilder = new UriBuilder(fetchUri);
    uriBuilder.Path += "/issueToken";
    var result = await httpClient.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
    return await result.Content.ReadAsStringAsync();
}

返されたアクセス トークン (Base64 テキスト) の有効期限は 10 分です。 そのため、このサンプル アプリケーションではアクセス トークンを 9 分ごとに更新します。

このアクセス トークンは、次のコード例に示すように、各 Translator Text API 呼び出しで、文字列 Authorization のプレフィックスを付けた Bearer ヘッダーとして指定する必要があります。

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);

Cognitive Services トークン サービスの詳細については、「認証」を参照してください。

テキスト翻訳を実行する

テキスト翻訳を実行するには、https://api.microsofttranslator.com/v2/http.svc/translatetranslate API に対して GET 要求を行います。 このサンプル アプリケーションでは、TranslateTextAsync メソッドでテキスト翻訳プロセスを呼び出します。

public async Task<string> TranslateTextAsync(string text)
{
  ...
  string requestUri = GenerateRequestUri(Constants.TextTranslatorEndpoint, text, "en", "de");
  string accessToken = authenticationService.GetAccessToken();
  var response = await SendRequestAsync(requestUri, accessToken);
  var xml = XDocument.Parse(response);
  return xml.Root.Value;
}

TranslateTextAsync メソッドでは、要求 URI を生成し、トークン サービスからアクセス トークンを取得します。 その後に、テキスト変換要求が translate API に送信され、結果を含む XML 応答が返されます。 XML 応答が解析され、翻訳結果が呼び出し元のメソッドに返されて表示されます。

テキスト翻訳 REST API の詳細については、Translator Text API に関する記事を参照してください。

テキスト変換を構成する

テキスト翻訳プロセスは、HTTP クエリ パラメーターを指定して構成できます。

string GenerateRequestUri(string endpoint, string text, string to)
{
  string requestUri = endpoint;
  requestUri += string.Format("?text={0}", Uri.EscapeUriString(text));
  requestUri += string.Format("&to={0}", to);
  return requestUri;
}

このメソッドでは、翻訳するテキストと、テキストの翻訳先の言語を設定します。 Microsoft 翻訳ツールでサポートされている言語の一覧については、Microsoft Translator Text API でサポートされている言語に関する記事を参照してください。

Note

アプリケーションでテキストの言語を知る必要がある場合は、Detect API を呼び出すと、テキスト文字列の言語を検出できます。

要求を送信する

SendRequestAsync メソッドでは、Text Translation REST API に対する GET 要求を行い、応答を返します。

async Task<string> SendRequestAsync(string url, string bearerToken)
{
    if (httpClient == null)
    {
        httpClient = new HttpClient();
    }
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);

    var response = await httpClient.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}

このメソッドでは、文字列 Bearer のプレフィックスが付いた Authorization ヘッダーにアクセス トークンを追加して、GET 要求を作成します。 その GET 要求はその後、翻訳するテキストとテキストの翻訳先の言語を指定する要求 URL と共に translate API に送信されます。 この後、応答が読み取られ、呼び出し元のメソッドに返されます。

translate API は、要求が有効な場合、応答で HTTP 状態コード 200 (OK) を送信します。これは、要求が成功し、要求された情報が応答内にあることを示します。 考えられるエラー応答の一覧については、GET Translate に関するページの応答メッセージを参照してください。

応答の処理

API 応答は、XML 形式で返されます。 次の XML データは、成功したときの一般的な応答メッセージを示しています。

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Morgen kaufen gehen ein</string>

このサンプル アプリケーションでは、次のスクリーンショットに示すように、XML 応答が XDocument インスタンスに解析され、XML ルート値が呼び出し元のメソッドに返されて表示されます。

ドイツ語へのテキスト翻訳

まとめ

この記事では、Microsoft Translator Text API を使用して、Xamarin.Forms アプリケーションで、ある言語のテキストを別の言語のテキストに翻訳する方法について説明しました。 Microsoft Translator API を使用すると、テキストの翻訳に加え、音声をある言語から別の言語のテキストに文字起こしすることもできます。