Tradurre il testo a livello di codice utilizzando l'API Translator Text

Data di creazione della pagina :

Cosa preparare in anticipo

Crea un account Microsoft Azure in anticipo. La procedura di creazione è descritta in questa pagina.

Inoltre, questa volta ci registreremo con la versione gratuita, quindi si prega di cambiarla in modo tempestivo se si desidera utilizzare la versione a pagamento.

Creare risorse API

Aprire il portale di Microsoft Azure e fare clic su Nuovo nel menu a sinistra.

「新規」をクリック

Seleziona Intelligence + Analytics dal menu espanso.

「Intelligence + analytics」を選択

Dal menu espanso selezionare API di Servizi cognitivi (anteprima).

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

Quando viene visualizzata la schermata di creazione, inserisci un nome a tua scelta (sarà il nome visualizzato sulla dashboard) e seleziona "Prova gratuita" per l'abbonamento. Quindi fare clic su Tipo di API.

API type をクリック

Seleziona Translator Text API dall'elenco delle API.

「Translator Text API」を選択

Quindi seleziona Piano tariffario.

Pricing tier を選択

Poiché si utilizza la versione gratuita, fare clic su "F0 Free" e fare clic sul pulsante "Seleziona". La versione gratuita può convertire fino a 2 milioni di caratteri al mese.

「F0 Free」を選択

Se si registra un servizio per la prima volta, creare un nuovo gruppo di risorse. È possibile raggruppare le risorse create in gruppi di qualsiasi nome.

Una posizione è un luogo in cui mettere un servizio. Quando si sviluppa principalmente in Giappone, è più probabile che migliori le prestazioni se è installato in un Giappone.

Infine, seleziona "Aggiungi alla dashboard" e fai clic sul pulsante "Crea".

作成

Il dashboard contiene la risorsa creata in precedenza, quindi fai clic su di essa per aprirla.

リソースを開く

Penso che la panoramica sia aperta, quindi controlla l'URL per "Endpoint" a destra. Questo è l'URL dell'API a cui si deve accedere prima tramite autenticazione. Tuttavia, cambia raramente, ed è descritto nel programma che introdurrò in seguito, quindi è bene ricordare che è qui per il momento.

Endpoint

Selezionare Tasti dal menu.

「Keys」を選択

Prendere nota della CHIAVE 1 visualizzata e utilizzarla per l'autenticazione. Penso che avere due chiavi sia probabilmente una riserva. A proposito, se la chiave perde verso l'esterno per qualche motivo, puoi ricrearla con "Rigenera ..." sopra.

「KEY 1」をメモ

Questo conclude l'installazione sul lato Azure.

Accesso a livello di codice all'API per tradurre il testo

Ora è il momento di creare effettivamente un programma in modo da poter tradurre il testo. Utilizzare Visual Studio 2015 per creare un'applicazione WPF e creare una schermata simile alla seguente:

Immettere il testo in Da e in Lingua immettere la lingua che si desidera convertire in quale lingua. E se fai clic sul pulsante "Converti esegui", sarai in grado di vedere il testo tradotto nella "Destinazione" qui sotto.

XAML (MainWindow.xaml)

Non influisce direttamente sulla traduzione, quindi è incluso solo il codice.

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

Ottieni token di accesso (MainWindow.xaml.cs)

Il flusso di base per la traduzione del testo è il seguente:

  1. Inserisci KEY 1 nell'API per ottenere un token di accesso.
  2. Utilizzare il token di accesso per inviare il testo al servizio di traduzione per ottenere il testo tradotto.
  3. Ottenere nuovamente il token di accesso, se necessario

Si tratta di.

Innanzitutto, definiamo un metodo per ottenere un token di accesso e renderlo facile da usare. Se si passa la KEY 1 ottenuta in precedenza come argomento, è possibile ottenere il token di accesso. Può anche essere ottenuto mediante elaborazione sincrona, ma poiché è possibile utilizzare C # 5.0 async / await, rendiamolo facilmente un processo asincrono.

Come punto, impostare l'URL su Endpoint + "/issueToken" come confermato in Azure e impostare KEY 1 ottenuto con "Ocp-Apim-Subscription-Key" come chiave nell'intestazione da inviare.

Come risposta, la stringa del token di accesso può essere ottenuta così com'è, quindi viene utilizzata come valore restituito. A proposito, questo token di accesso è valido solo per 10 minuti.

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

Accedere all'API per la traduzione del testo (MainWindow.xaml.cs)

Questo è anche trasformato in un metodo per renderlo facile da usare. Gli argomenti consentono di specificare il token di accesso ottenuto e il testo da tradurre e la lingua da convertire in quale lingua.

Si noti che l'URL a cui si accede è diverso dall'URL in cui è stato ottenuto il token. Il testo e la lingua da tradurre vengono inviati come stringa di query nell'URL, quindi esegui l'escape utilizzando "Uri.EscapeDataString" in anticipo.

Il metodo GET invia quindi l'autorizzazione dell'intestazione con lo schema "Bearer" e il token nel parametro.

Poiché la risposta viene presa in formato XML, XDocument viene utilizzato per recuperare il testo tradotto all'interno. Tuttavia, se il testo contiene caratteri di escape XML, forse perché si utilizza XML, è possibile che rimangano con escape. Convertilo secondo necessità.

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

Processo di esecuzione dei pulsanti (MainWindow.xaml.cs)

Una volta implementati due metodi, tutto ciò che devi fare è chiamare ciascuno di essi. È possibile tradurre il testo impostando KEY1 e specificando il valore immesso per ciascun metodo. Poiché si tratta di un processo asincrono, aggiungere async al metodo di gestione dei pulsanti.

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

Elenco delle lingue traducibili

Si consiglia di fare riferimento alle seguenti pagine Micorsoft: Poiché è uno dei servizi cloud, può essere modificato in qualsiasi momento.