Překlad textu pomocí služby Translator API

Rozhraní Microsoft Translator API se dá použít k překladu řeči a textu prostřednictvím rozhraní REST API. Tento článek vysvětluje, jak pomocí rozhraní Microsoft Translator Text API přeložit text z jednoho jazyka do jiného Xamarin.Forms v aplikaci.

Přehled

Rozhraní Translator API má dvě komponenty:

  • Rozhraní REST API pro překlad textu pro překlad textu z jednoho jazyka do textu jiného jazyka. Rozhraní API automaticky rozpozná jazyk textu, který byl odeslán před jeho překladem.
  • Rozhraní REST API pro překlad řeči pro přepis řeči z jednoho jazyka do textu jiného jazyka. Rozhraní API také integruje funkce převodu textu na řeč a překládá přeložený text zpět.

Tento článek se zaměřuje na překlad textu z jednoho jazyka do jiného pomocí služby Translator Text API.

Poznámka:

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Klíč rozhraní API se musí získat pro použití služby Translator Text API. Můžete ho získat na adrese How to sign up for the Microsoft Translator Text API.

Další informace o rozhraní Microsoft Translator Text API najdete v dokumentaci k rozhraní Translator Text API.

Ověřování

Každá žádost v rozhraní Translator Text API vyžaduje přístupový token JSON Web Token (JWT), který je možné získat ze služby tokenů služeb Cognitive Services na adrese https://api.cognitive.microsoft.com/sts/v1.0/issueToken. Token lze získat provedením požadavku POST do služby tokenů a Ocp-Apim-Subscription-Key zadáním hlavičky, která obsahuje klíč rozhraní API jako jeho hodnotu.

Následující příklad kódu ukazuje, jak požádat o přístupový token ze služby 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();
}

Vrácený přístupový token, což je text Base64, má dobu vypršení platnosti 10 minut. Ukázková aplikace proto obnovuje přístupový token každých 9 minut.

Přístupový token musí být zadán v každém volání služby Translator Text API jako hlavička Authorization s předponou řetězce Bearer, jak je znázorněno v následujícím příkladu kódu:

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

Další informace o službě tokenů služeb Cognitive Services najdete v tématu Ověřování.

Provádění překladu textu

Překlad textu lze dosáhnout provedením požadavku GET do translate rozhraní API na adrese https://api.microsofttranslator.com/v2/http.svc/translate. V ukázkové aplikaci TranslateTextAsync metoda vyvolá proces překladu textu:

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

Metoda TranslateTextAsync vygeneruje identifikátor URI požadavku a načte přístupový token ze služby tokenů. Požadavek na překlad textu se pak odešle do translate rozhraní API, který vrátí odpověď XML obsahující výsledek. Odpověď XML se analyzuje a výsledek překladu se vrátí do volající metody pro zobrazení.

Další informace o rozhraníCH REST API pro překlad textu najdete v tématu Translator Text API.

Konfigurace překladu textu

Proces překladu textu lze nakonfigurovat zadáním parametrů dotazu 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;
}

Tato metoda nastaví text, který se má přeložit, a jazyk, na který se má text přeložit. Seznam jazyků podporovaných službou Microsoft Translator naleznete v tématu Podporované jazyky v rozhraní Microsoft Translator Text API.

Poznámka:

Pokud aplikace potřebuje vědět, v jakém jazyce text je, Detect můžete rozhraní API volat, aby zjistilo jazyk textového řetězce.

Odeslání požadavku

Metoda SendRequestAsync provede požadavek GET do rozhraní REST API pro překlad textu a vrátí odpověď:

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

Tato metoda sestaví požadavek GET přidáním přístupového tokenu Authorization do hlavičky s předponou řetězce Bearer. Požadavek GET se pak odešle do translate rozhraní API s adresou URL požadavku, která určuje text, který se má přeložit, a jazykem pro překlad textu. Odpověď se pak přečte a vrátí do volající metody.

Rozhraní translate API odešle v odpovědi stavový kód HTTP 200 (OK) za předpokladu, že požadavek je platný, což znamená, že požadavek byl úspěšný a že požadované informace jsou v odpovědi. Seznam možných chybových odpovědí naleznete v tématu Zprávy odpovědí na GET Translate.

Zpracování odpovědi

Odpověď rozhraní API se vrátí ve formátu XML. Následující data XML zobrazují typickou úspěšnou zprávu odpovědi:

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

V ukázkové aplikaci se odpověď XML analyzuje do instance s vrácenou XDocument kořenovou hodnotou XML do volající metody pro zobrazení, jak je znázorněno na následujících snímcích obrazovky:

Překlad textu do němčiny

Shrnutí

Tento článek vysvětluje, jak pomocí rozhraní Microsoft Translator Text API přeložit text z jednoho jazyka do textu jiného jazyka v Xamarin.Forms aplikaci. Kromě překladu textu může rozhraní Microsoft Translator API také přepisovat řeč z jednoho jazyka do textu jiného jazyka.