Tradução de texto usando a API do tradutor
A API do Microsoft Translator pode ser usada para traduzir fala e texto por meio de uma API REST. Este artigo explica como usar a API de texto do Microsoft Translator para traduzir texto de um idioma para outro em um Xamarin.Forms aplicativo.
Visão geral
A API do Translator tem dois componentes:
- Uma API REST de tradução de texto para traduzir texto de um idioma para texto de outro idioma. A API detecta automaticamente o idioma do texto que foi enviado antes de traduzi-lo.
- Uma API REST de tradução de fala para transcrever a fala de um idioma para o texto de outro idioma. A API também integra funcionalidades de conversão de texto em fala para falar o texto traduzido novamente.
Este artigo se concentra na tradução de texto de um idioma para outro usando a API de Texto do Tradutor.
Observação
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Uma chave de API deve ser obtida para usar a API de Texto do Tradutor. Isso pode ser obtido em Como se inscrever na API de Texto do Microsoft Translator.
Para obter mais informações sobre a API de texto do Microsoft Translator, consulte Documentação da API de texto do tradutor.
Autenticação
Cada solicitação feita à API de Texto do Tradutor requer um token de acesso JWT (JSON Web Token), que pode ser obtido do serviço de token de serviços cognitivos em https://api.cognitive.microsoft.com/sts/v1.0/issueToken
. Um token pode ser obtido fazendo uma solicitação POST para o serviço de token, especificando um Ocp-Apim-Subscription-Key
cabeçalho que contém a chave de API como seu valor.
O exemplo de código a seguir mostra como solicitar um token de acesso do serviço de token:
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();
}
O token de acesso retornado, que é o texto Base64, tem um tempo de expiração de 10 minutos. Portanto, o aplicativo de exemplo renova o token de acesso a cada 9 minutos.
O token de acesso deve ser especificado em cada chamada da API de Texto do Tradutor como um Authorization
cabeçalho prefixado com a cadeia de caracteres Bearer
, conforme mostrado no exemplo de código a seguir:
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
Para obter mais informações sobre o serviço de token de serviços cognitivos, consulte Autenticação.
Realizando a tradução de texto
A tradução de texto pode ser obtida fazendo uma solicitação GET para a translate
API em https://api.microsofttranslator.com/v2/http.svc/translate
. No aplicativo de exemplo, o TranslateTextAsync
método invoca o processo de tradução de texto:
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;
}
O TranslateTextAsync
método gera um URI de solicitação e recupera um token de acesso do serviço de token. A solicitação de conversão de texto é enviada para a translate
API, que retorna uma resposta XML contendo o resultado. A resposta XML é analisada e o resultado da conversão é retornado ao método de chamada para exibição.
Para obter mais informações sobre as APIs REST de tradução de texto, consulte API de texto do tradutor.
Configurando a tradução de texto
O processo de tradução de texto pode ser configurado especificando parâmetros de consulta 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;
}
Esse método define o texto a ser traduzido e o idioma para o qual traduzir o texto. Para obter uma lista dos idiomas suportados pelo Microsoft Translator, consulte Idiomas suportados na API de texto do Microsoft Translator.
Observação
Se um aplicativo precisar saber em que idioma o texto está, a Detect
API poderá ser chamada para detectar o idioma da cadeia de caracteres de texto.
Enviando a solicitação
O SendRequestAsync
método faz a solicitação GET para a API REST de tradução de texto e retorna a resposta:
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();
}
Esse método cria a solicitação GET adicionando o token de acesso ao Authorization
cabeçalho, prefixado com a cadeia de caracteres Bearer
. A solicitação GET é então enviada para a translate
API, com a URL da solicitação especificando o texto a ser traduzido e o idioma para o qual traduzir o texto. A resposta é então lida e retornada ao método de chamada.
A translate
API enviará o código de status HTTP 200 (OK) na resposta, desde que a solicitação seja válida, o que indica que a solicitação foi bem-sucedida e que as informações solicitadas estão na resposta. Para obter uma lista de possíveis respostas de erro, consulte Mensagens de resposta em GET Translate.
Como processar a resposta
A resposta da API é retornada no formato XML. Os dados XML a seguir mostram uma mensagem de resposta bem-sucedida típica:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Morgen kaufen gehen ein</string>
No aplicativo de exemplo, a resposta XML é analisada em uma XDocument
instância, com o valor raiz XML sendo retornado ao método de chamada para exibição, conforme mostrado nas seguintes capturas de tela:
Resumo
Este artigo explicou como usar a API de texto do Microsoft Translator para traduzir texto de um idioma em texto de outro idioma em um Xamarin.Forms aplicativo. Além de traduzir texto, a API do Microsoft Translator também pode transcrever fala de um idioma para texto de outro idioma.