Tradueix per programació el text mitjançant l'API de text del traductor

Data de creació de la pàgina :

Què preparar amb antelació

Crea prèviament un compte del Microsoft Azure. El procediment de creació es descriu en aquesta pàgina.

A més, aquesta vegada ens registrarem amb la versió gratuïta, així que si us plau, canvieu-la oportunament si voleu utilitzar la versió de pagament.

Crear recursos de l'API

Obriu el portal del Microsoft Azure i feu clic a Crea al menú de l'esquerra.

「新規」をクリック

Seleccioneu Intel·ligència + Analytics al menú ampliat.

「Intelligence + analytics」を選択

Al menú ampliat, seleccioneu API de Cognitive Services (Previsualització).

「Cognitive Services APIs (プレビュー)」を選択

Quan aparegui la pantalla de creació, introduïu un nom que trieu (serà el nom de visualització al tauler) i seleccioneu "Prova gratuïta" per a la subscripció. A continuació, feu clic al tipus d'API.

API type をクリック

Seleccioneu l'API de text del Traductor de la llista d'API.

「Translator Text API」を選択

A continuació, seleccioneu Nivell de preus.

Pricing tier を選択

Ja que utilitzeu la versió gratuïta, feu clic a "F0 Gratuït" i feu clic al botó "Seleccionar". La versió gratuïta pot convertir fins a 2 milions de caràcters al mes.

「F0 Free」を選択

Si esteu registrant un servei per primera vegada, creeu un grup de recursos nou. Podeu agrupar els recursos que creeu en grups de qualsevol nom.

Un lloc és un lloc per posar un servei. Quan es desenvolupa principalment al Japó, és més probable que millori el rendiment si s'instal·la al Japó.

Finalment, marqueu "Ancora al tauler" i feu clic al botó "Crear".

作成

L'escriptori digital té el recurs que heu creat anteriorment, així que feu-hi clic per obrir-lo.

リソースを開く

Crec que la visió general està oberta, així que comproveu l'URL de "Punt final" a la dreta. Aquesta és l'URL de l'API a la quals s'ha d'accedir primer mitjançant autenticació. No obstant això, poques vegades canvia, i es descriu en el programa que presentaré més endavant, de manera que és bo recordar que és aquí de moment.

Endpoint

Seleccioneu les tecles del menú.

「Keys」を選択

Pren nota de la CLAU 1 que apareix i utilitza-la per autenticar-te. Crec que tenir dues claus és probablement una reserva. Per cert, si la clau es filtra a l'exterior per alguna raó, podeu recrear-la amb "Regenerar..." a dalt.

「KEY 1」をメモ

Això conclou la configuració al costat de l'Azure.

Accedeix programàticament a l'API per traduir text

Ara és el moment de crear un programa perquè pugueu traduir el text. Utilitzeu El Visual Studio 2015 per crear una aplicació WPF i crear una pantalla que tingui aquest aspecte:

Introduïu text a De i en Idioma, introduïu l'idioma que voleu convertir a quin idioma. I si fa clic en el botó "Convertir Execució", podrà veure el text traduït en el "Destinació" a continuació.

XAML (MainWindow.xaml)

No afecta directament la traducció, de manera que només s'inclou el codi.

<Window x:Class="AzureTranslatorTextApi.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:AzureTranslatorTextApi"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="*"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label x:Name="label" Content="変換元" HorizontalAlignment="Left" Grid.Row="0"/>
    <TextBox x:Name="textBoxInput" Margin="4" Text="ここに変換するテキストを入力します。" Grid.Row="1" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/>
    <Label x:Name="labelLang" Content="言語" HorizontalAlignment="Left" Grid.Row="2"/>
    <Label x:Name="labelLangFrom" Content="from" HorizontalAlignment="Left" Grid.Row="2" Margin="56,0,0,0"/>
    <TextBox x:Name="textBoxLangFrom" Margin="96,4,0,4"  HorizontalAlignment="Left" Text="ja" Grid.Row="2" Width="50"/>
    <Label x:Name="labelLangTo" Content="to" HorizontalAlignment="Left" Grid.Row="2" Margin="164,0,0,0"/>
    <TextBox x:Name="textBoxLangTo" Margin="190,4,0,4"  HorizontalAlignment="Left" Text="en" Grid.Row="2" Width="50" />
    <Button x:Name="button" Content="変換実行"  Margin="24,4" Height="24" Grid.Row="3" Click="button_Click"/>
    <Label x:Name="label_Copy" Content="変換先" HorizontalAlignment="Left" Grid.Row="4"/>
    <TextBox x:Name="textBoxOutput" Margin="4" Grid.Row="5" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" IsReadOnly="True" Background="#FFE8E8E8" HorizontalScrollBarVisibility="Auto"/>
  </Grid>
</Window>

Obtén el testimoni d'accés (MainWindow.xaml.cs)

El flux bàsic per a la traducció de text és el següent:

  1. Llenceu la clau 1 a l'API per obtenir un testimoni d'accés.
  2. Utilitzeu el testimoni d'accés per llançar el text al servei de traducció per obtenir el text traduït.
  3. Torna a obtenir el testimoni d'accés si és necessari

Es tracta.

En primer lloc, definim un mètode per obtenir un testimoni d'accés i facilitar-ne l'ús. Si supereu la CLAU 1 obtinguda abans com a argument, podeu obtenir el testimoni d'accés. També es pot obtenir mitjançant processament síncron, però com que C # 5.0 async / await es pot utilitzar, fem que sigui un procés asíncron fàcilment.

Com a punt, establiu l'URL a Endpoint + "/issueToken" tal com es confirma a Azure i establiu KEY 1 obtingut amb "Ocp-Apim-Subscription-Key" com a clau de la capçalera que s'enviarà.

Com a resposta, la cadena del testimoni d'accés es pot obtenir tal com és, de manera que s'utilitza com a valor de retorn. Per cert, aquest testimoni d'accés només té una validesa de 10 minuts.

/// <summary>
/// 非同期でアクセストークンを取得します。
/// </summary>
/// <param name="subscriptionKey">認証に必要なキー文字列。</param>
/// <returns>取得したアクセストークン。</returns>
private async Task<string> GetAccessTokenAsync(string subscriptionKey)
{
  using (var client = new HttpClient())
  using (var request = new HttpRequestMessage())
  {
    request.Method = HttpMethod.Post;
    request.RequestUri = new Uri("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
    request.Content = new StringContent(string.Empty);
    request.Headers.TryAddWithoutValidation("Ocp-Apim-Subscription-Key", subscriptionKey);
    using (var response = await client.SendAsync(request))
    {
      response.EnsureSuccessStatusCode();
      var token = await response.Content.ReadAsStringAsync();

      Trace.WriteLine($"token={token}");

      return token;
    }
  }
}

Accedir a l'API per a la traducció de text (MainWindow.xaml.cs)

Això també es converteix en un mètode per facilitar-ne l'ús. Els arguments us permeten especificar el testimoni d'accés que obteniu i el text a traduir i quin idioma convertir a quin idioma.

Tingueu en compte que l'URL al qual accediu és diferent de l'URL on heu obtingut el testimoni. El text i l'idioma a traduir s'envien com una cadena de consulta a l'URL, de manera que escapeu-los mitjançant "Uri.EscapeDataString" amb antelació.

A continuació, el mètode GET envia l'autorització de la capçalera amb l'esquema "Portador" i el testimoni del paràmetre.

Com que la resposta es pren en format XML, l'XDocument s'utilitza per recuperar el text traduït a l'interior. Tanmateix, si el text conté caràcters d'escapament XML, potser perquè esteu utilitzant XML, és possible que s'escapin. Convertir-lo segons sigui necessari.

/// <summary>
/// テキストを翻訳します。
/// </summary>
/// <param name="token">API のアクセスに必要なトークン。</param>
/// <param name="text">翻訳するテキスト、</param>
/// <param name="fromLang">翻訳元の言語。</param>
/// <param name="toLang">翻訳先の言語。</param>
/// <returns>翻訳されたテキスト。</returns>
private async Task<string> TranslateText(string token, string text, string fromLang, string toLang)
{
  using (var client = new HttpClient())
  using (var request = new HttpRequestMessage())
  {
    // URL につけて送信するのでエンコードする
    var escapeText = Uri.EscapeDataString(text);
    Trace.WriteLine($"escapeText={escapeText}");

    var uriStr = "http://api.microsofttranslator.com/V2/Http.svc/Translate?"
      + $"text={escapeText}&from={fromLang}&to={toLang}";

    request.Method = HttpMethod.Get;
    request.RequestUri = new Uri(uriStr);
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
    using (var response = await client.SendAsync(request))
    {
      response.EnsureSuccessStatusCode();
      var resultText = await response.Content.ReadAsStringAsync();

      // <string>XXXXXX</string> 形式で取得されるので XDocument で操作する
      XDocument xdoc = XDocument.Parse(resultText);

      Trace.WriteLine($"xdoc={xdoc.ToString()}");

      // XML エスケープ対象文字が正しく変換されない場合があるので
      // 必要があれば対処すること
      return xdoc.Descendants().First().Value;
    }
  }
}

Procés d'execució de botons (MainWindow.xaml.cs)

Un cop hàgiu implementat dos mètodes, tot el que heu de fer és trucar a cadascun. Podeu traduir text establint KEY1 i especificant el valor introduït per a cada mètode. Com que és un procés asíncron, afegiu asíncrot al mètode de manipulació de botons.

private async void button_Click(object sender, RoutedEventArgs e)
{
  // ここに認証キー(KEY1)を入力してください
  string subscriptionKey = "XXXXXXXXX";

  // アクセストークンを取得します。有効時間は10分程度です。(おそらく)
  var token = await GetAccessTokenAsync(subscriptionKey);

  // テキストを翻訳し表示します
  textBoxOutput.Text = await TranslateText(token, textBoxInput.Text, textBoxLangFrom.Text, textBoxLangTo.Text);
}

Llista d'idiomes traduïbles

És possible que vulgueu fer referència a les pàgines de Micorsoft següents: Atès que és un dels serveis en el núvol, es pot canviar en qualsevol moment.