Traducción de texto mediante la API Translator
La API de Traductor de Microsoft se puede usar para traducir voz y texto a través de una API de REST. En este artículo se explica cómo usar la API de Microsoft Translator Text para traducir texto de un idioma a otro en una aplicación Xamarin.Forms.
Información general
La API Translator tiene dos componentes:
- Una API REST para traducir texto de un idioma a texto en otro idioma. La API detecta automáticamente el idioma del texto que se ha enviado antes de traducirlo.
- Una API REST de traducción de voz para transcribir voz de un idioma a texto en otro idioma. La API también integra las funcionalidades de texto a voz para volver a hablar el texto traducido.
Este artículo se centra en traducir texto de un idioma a otro mediante la API Translator Text.
Nota:
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Se debe obtener una clave de API para usar la API Translator Text. Esto se puede obtener en Cómo suscribirse a la API Microsoft Translator Text.
Para obtener más información sobre la API Microsoft Translator Text, consulte Documentación de la API Translator Text.
Autenticación
Cada solicitud realizada a la API Translator Text requiere un token de acceso JSON Web Token (JWT), que se puede obtener del servicio de token de Cognitive Services en https://api.cognitive.microsoft.com/sts/v1.0/issueToken
. Un token se puede obtener mediante la realización de una solicitud POST al servicio de token, especificando un encabezado Ocp-Apim-Subscription-Key
que contiene la clave de API como su valor.
En el ejemplo de código siguiente se muestra cómo solicitar un token de acceso desde el servicio 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();
}
El token de acceso devuelto, que es texto de Base64, tiene un tiempo de expiración de 10 minutos. Por lo tanto, la aplicación de ejemplo renueva el token de acceso cada 9 minutos.
El token de acceso debe especificarse en cada llamada de la API Translator Text como encabezado Authorization
con el prefijo de cadena Bearer
, como se muestra en el ejemplo de código siguiente:
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
Para más información sobre el servicio de token de Cognitive Services, consulte Autenticación.
Traducción de texto
La traducción de texto se puede lograr mediante la realización de una solicitud GET a la API translate
en https://api.microsofttranslator.com/v2/http.svc/translate
. En la aplicación de ejemplo, el método TranslateTextAsync
invoca al proceso de traducción 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;
}
El método TranslateTextAsync
genera un URI de solicitud y recupera un token de acceso del servicio de token. A continuación, la solicitud de traducción de texto se envía a la API translate
, que devuelve una respuesta XML que contiene el resultado. La respuesta XML se analiza y el resultado de la traducción se devuelve al método de llamada para su presentación.
Para más información sobre las API REST de traducción de texto, consulte API Translator Text.
Configuración de la traducción de texto
El proceso de traducción de texto se puede configurar 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;
}
Este método establece el texto que se va a traducir y el idioma al que se va a traducir. Para obtener una lista de los idiomas que admite Microsoft Translator, consulte Idiomas admitidos en la API Microsoft Translator Text.
Nota:
Si una aplicación necesita saber en qué idioma está el texto, se puede llamar a la API Detect
para detectar el idioma de la cadena de texto.
Envío de la solicitud
El método SendRequestAsync
realiza la solicitud GET a la API REST de traducción de texto y devuelve la respuesta siguiente:
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();
}
Este método compila la solicitud GET agregando el token de acceso al encabezado Authorization
, con la cadena Bearer
como prefijo. A continuación, la solicitud GET se envía a la API translate
, con la dirección URL de solicitud que especifica el texto que se va a traducir y el idioma al que se va a traducir el texto. A continuación, la respuesta se lee y se devuelve al método de llamada.
La API translate
enviará el código de estado HTTP 200 (CORRECTO) en la respuesta, siempre que la solicitud sea válida, lo que indicará que la solicitud se ha realizado correctamente y que la información solicitada está en la respuesta. Para obtener una lista de posibles respuestas de error, consulte Mensajes de respuesta en GET Translate.
Procesamiento de la respuesta
La respuesta de la API se devuelve en formato XML. Los siguientes datos XML muestran un mensaje de respuesta correcto típico:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Morgen kaufen gehen ein</string>
En la aplicación de ejemplo, la respuesta XML se analiza en una instancia XDocument
y el valor raíz XML se devuelve al método de llamada para su visualización, como se muestra en las siguientes capturas de pantalla:
Resumen
En este artículo se explica cómo usar la API Microsoft Translator Text para traducir texto de un idioma a texto en otro idioma en una aplicación Xamarin.Forms. Además de traducir texto, la API Translator de Microsoft también puede transcribir la voz de un idioma a texto en otro idioma.