Перевод текста с помощью API Переводчик

API Переводчик Майкрософт можно использовать для перевода речи и текста с помощью REST API. В этой статье объясняется, как использовать API Переводчик Майкрософт text для перевода текста с одного языка на другой в Xamarin.Forms приложении.

Обзор

API Переводчик имеет два компонента:

  • REST API перевода текста для перевода текста из одного языка в текст другого языка. API автоматически обнаруживает язык отправленного текста перед переводом.
  • REST API перевода речи для транскрибирования речи с одного языка на текст другого языка. API также сочетает в себе возможности преобразования текста в речь для обратного перевода переведенного текста.

В этой статье рассматривается перевод текста с одного языка на другой с помощью API Переводчик text.

Примечание.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.

Ключ API должен быть получен для использования API Переводчик Текстового API. Это можно получить при регистрации в API Переводчик Майкрософт текста.

Дополнительные сведения об API Переводчик Майкрософт текста см. в Переводчик документации по API текста.

Проверка подлинности

Для каждого запроса, сделанного в API Переводчик Text, требуется маркер доступа к веб-маркеру JSON (JWT), который можно получить из службы маркеров cognitive services по адресуhttps://api.cognitive.microsoft.com/sts/v1.0/issueToken. Маркер можно получить, выполнив запрос POST в службу токенов, указав Ocp-Apim-Subscription-Key заголовок, содержащий ключ API в качестве значения.

В следующем примере кода показано, как запросить маркер доступа из службы маркеров:

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 минут.

Маркер доступа должен быть указан в каждом вызове api текста Переводчик в качестве Authorization префикса заголовка строкойBearer, как показано в следующем примере кода:

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

Дополнительные сведения о службе маркеров cognitive services см. в разделе "Проверка подлинности".

Выполнение перевода текста

Перевод текста можно добиться путем отправки запроса GET в translate API по адресу https://api.microsofttranslator.com/v2/http.svc/translate. В примере приложения 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 перевода текста см. в Переводчик 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;
}

Этот метод задает перевод текста и язык для перевода текста. Список языков, поддерживаемых Переводчик Майкрософт, см. в разделе "Поддерживаемые языки" в API Переводчик Майкрософт текста.

Примечание.

Если приложению нужно знать, какой язык находится текст, Detect API можно вызвать для обнаружения языка текстовой строки.

Отправка запроса

Метод SendRequestAsync выполняет запрос GET к REST API перевода текста и возвращает ответ:

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();
}

Этот метод создает запрос GET, добавив маркер доступа к Authorization заголовку, префиксированную строкой Bearer. Затем запрос GET отправляется translate в API с URL-адресом запроса, указывающим текст для перевода, и язык для перевода текста в. Затем ответ считывается и возвращается в вызывающий метод.

translate API отправит код состояния HTTP 200 (ОК) в ответе, при условии, что запрос действителен, что указывает, что запрос выполнен успешно, и что запрошенные сведения отображаются в ответе. Список возможных ответов на ошибки см. в статье "Ответные сообщения" в GET Translate.

Обработка ответа

Ответ API возвращается в формате XML. Следующие XML-данные показывают типичное сообщение об успешном ответе:

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

В примере приложения xml-ответ анализируется в XDocument экземпляр, при этом корневое значение XML возвращается в вызывающий метод для отображения, как показано на следующих снимках экрана:

Перевод текста на немецкий язык

Итоги

В этой статье объясняется, как использовать API Переводчик Майкрософт text для перевода текста из одного языка в текст другого языка в Xamarin.Forms приложении. Помимо перевода текста, API Переводчик Майкрософт также может транскрибировать речь с одного языка на текст другого языка.