Перевод текста с помощью 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 Переводчик Майкрософт также может транскрибировать речь с одного языка на текст другого языка.