Menerjemahkan teks secara terprogram menggunakan API Teks Penerjemah

Tanggal pembuatan halaman :

Apa yang harus dipersiapkan sebelumnya

Buat akun Microsoft Azure sebelumnya. Prosedur pembuatan dijelaskan di halaman ini.

Juga, kali ini kami akan mendaftar dengan versi gratis, jadi harap ubah tepat waktu jika Anda ingin menggunakan versi berbayar.

Membuat sumber daya API

Buka portal Microsoft Azure dan klik Baru di menu sebelah kiri.

「新規」をクリック

Pilih Kecerdasan + Analitik dari menu yang diperluas.

「Intelligence + analytics」を選択

Dari menu yang diperluas, pilih Cognitive Services API (Pratinjau).

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

Saat layar pembuatan muncul, masukkan nama pilihan Anda (itu akan menjadi nama tampilan di dasbor) dan pilih "Uji Coba Gratis" untuk langganan. Kemudian klik jenis API.

API type をクリック

Pilih API Teks Penerjemah dari daftar API.

「Translator Text API」を選択

Kemudian pilih Tingkat harga.

Pricing tier を選択

Karena Anda menggunakan versi gratis, klik "F0 Free" dan klik tombol "Select". Versi gratisnya dapat mengonversi hingga 2 juta karakter per bulan.

「F0 Free」を選択

Jika Anda mendaftarkan layanan untuk pertama kalinya, buat grup Sumber Daya baru. Anda dapat mengelompokkan sumber daya yang Anda buat ke dalam grup dengan nama apa pun.

Lokasi adalah tempat untuk menempatkan layanan. Ketika berkembang terutama di Jepang, lebih mungkin untuk meningkatkan kinerja jika dipasang di Jepang.

Terakhir, centang "Sematkan ke dasbor" dan klik tombol "Buat".

作成

Dasbor memiliki sumber daya yang Anda buat sebelumnya, jadi klik untuk membukanya.

リソースを開く

Saya pikir Gambaran Umum terbuka, jadi periksa URL untuk "Titik Akhir" di sebelah kanan. Ini adalah URL API yang harus diakses oleh autentikasi terlebih dahulu. Namun, jarang berubah, dan dijelaskan dalam program yang akan saya perkenalkan nanti, jadi ada baiknya untuk diingat bahwa itu ada di sini untuk saat ini.

Endpoint

Pilih Kunci dari menu.

「Keys」を選択

Catat KEY 1 yang muncul dan gunakan untuk mengautentikasi. Saya pikir memiliki dua kunci mungkin merupakan cadangan. Ngomong-ngomong, jika kuncinya bocor ke luar karena alasan tertentu, Anda dapat membuatnya kembali dengan "Regenerasi ..." di atas.

「KEY 1」をメモ

Ini menyimpulkan penyiapan di sisi Azure.

Akses API secara terprogram untuk menerjemahkan teks

Sekarang saatnya untuk benar-benar membuat program sehingga Anda dapat menerjemahkan teks. Gunakan Visual Studio 2015 untuk membuat aplikasi WPF dan membuat layar yang terlihat seperti ini:

Masukkan teks di Dari, dan dalam Bahasa, masukkan bahasa mana yang ingin Anda konversi ke bahasa mana. Dan jika Anda mengklik tombol "Convert Run", Anda akan dapat melihat teks terjemahan di "Tujuan" di bawah ini.

XAML (MainWindow.xaml)

Itu tidak secara langsung mempengaruhi terjemahan, jadi hanya kode yang disertakan.

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

Dapatkan Token Akses (MainWindow.xaml.cs)

Alur dasar untuk terjemahan teks adalah sebagai berikut:

  1. LemparKAN KEY 1 ke dalam API untuk mendapatkan token akses.
  2. Gunakan token akses untuk membuang teks ke layanan terjemahan untuk mendapatkan teks yang diterjemahkan.
  3. Dapatkan token akses lagi jika diperlukan

Itu datang ke.

Pertama, mari kita tentukan metode untuk mendapatkan token akses dan membuatnya mudah digunakan. Jika Anda melewati KEY 1 yang diperoleh sebelumnya sebagai argumen, Anda bisa mendapatkan token akses. Ini juga dapat diperoleh dengan pemrosesan sinkron, tetapi karena C# 5.0 asinkron / menunggu dapat digunakan, mari kita jadikan itu proses asinkron dengan mudah.

Sebagai titik, atur URL ke Endpoint + "/issueToken" seperti yang dikonfirmasi di Azure, dan atur KEY 1 yang diperoleh dengan "Ocp-Apim-Subscription-Key" sebagai kunci di header yang akan dikirim.

Sebagai respons, string token akses dapat diperoleh apa adanya, sehingga digunakan sebagai nilai yang dikembalikan. Omong-omong, token akses ini hanya berlaku selama 10 menit.

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

Akses API untuk terjemahan teks (MainWindow.xaml.cs)

Ini juga dibuat menjadi metode untuk membuatnya mudah digunakan. Argumen memungkinkan Anda untuk menentukan token akses yang Anda dapatkan dan teks untuk diterjemahkan, dan bahasa mana yang akan dikonversi ke bahasa mana.

Perhatikan bahwa URL yang Anda akses berbeda dari URL tempat Anda memperoleh token. Teks dan bahasa yang akan diterjemahkan dikirim sebagai string kueri di URL, jadi hindari menggunakan "Uri.EscapeDataString" terlebih dahulu.

Metode GET kemudian mengirimkan Otorisasi Header dengan skema "Bearer" dan token dalam parameter.

Karena respons diambil dalam format XML, XDocument digunakan untuk mengambil teks yang diterjemahkan di dalamnya. Namun, jika teks berisi karakter pelarian XML, mungkin karena Anda menggunakan XML, mereka mungkin tetap melarikan diri. Konversikan sesuai kebutuhan.

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

Proses eksekusi tombol (MainWindow.xaml.cs)

Setelah Anda menerapkan dua metode, yang harus Anda lakukan adalah memanggil masing-masing metode. Anda dapat menerjemahkan teks dengan mengatur KEY1 dan menentukan nilai yang dimasukkan untuk setiap metode. Karena ini adalah proses asinkron, tambahkan asinkron ke metode penanganan tombol.

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

Daftar bahasa yang dapat diterjemahkan

Anda mungkin ingin merujuk ke halaman Micorsoft berikut: Karena ini adalah salah satu layanan cloud, ini dapat diubah kapan saja.