Programozott fordítás szöveg a Translator Text API használatával

Oldal létrehozásának dátuma :

Mit kell előre elkészíteni

Előzetesen hozzon létre egy Microsoft Azure-fiókot. A létrehozási eljárást ezen az oldalon ismertetjük.

Ezenkívül ezúttal regisztrálunk az ingyenes verzióval, ezért kérjük, időben változtassa meg, ha a fizetős verziót szeretné használni.

API-erőforrások létrehozása

Nyissa meg a Microsoft Azure Portalt, és kattintson az Új elemre a bal oldali menüben.

「新規」をクリック

Válassza az Intelligencia + Elemzés lehetőséget a kibővített menüből.

「Intelligence + analytics」を選択

A kibontott menüben válassza a Cognitive Services API-k (előzetes verzió) lehetőséget.

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

Amikor megjelenik a létrehozási képernyő, adjon meg egy tetszőleges nevet (ez lesz a megjelenített név az irányítópulton), és válassza az "Ingyenes próbaverzió" lehetőséget az előfizetéshez. Ezután kattintson az API típusa elemre.

API type をクリック

Válassza a Translator Text API lehetőséget az API-k listájából.

「Translator Text API」を選択

Ezután válassza a Tarifacsomag lehetőséget.

Pricing tier を選択

Mivel az ingyenes verziót használja, kattintson az "F0 Free" gombra, majd a "Kiválasztás" gombra. Az ingyenes verzió havonta akár 2 millió karaktert is konvertálhat.

「F0 Free」を選択

Ha első alkalommal regisztrál egy szolgáltatást, hozzon létre egy új erőforráscsoportot. A létrehozott erőforrásokat bármilyen nevű csoportokba csoportosíthatja.

A hely egy szolgáltatás elhelyezésének helye. Ha elsősorban Japánban fejlődik, nagyobb valószínűséggel javítja a teljesítményt, ha Japánban telepítik.

Végül jelölje be a "Rögzítés az irányítópultra" lehetőséget, majd kattintson a "Létrehozás" gombra.

作成

Az irányítópult rendelkezik a korábban létrehozott erőforrással, ezért kattintson rá a megnyitásához.

リソースを開く

Úgy gondolom, hogy az Áttekintés meg van nyitva, ezért ellenőrizze a "Végpont" URL-címét a jobb oldalon. Ez annak az API-nak az URL-címe, amelyhez először hitelesítéssel kell hozzáférni. Ez azonban ritkán változik, és a programban le van írva, amelyet később bemutatok, ezért jó emlékezni arra, hogy egyelőre itt van.

Endpoint

Válassza a Kulcsok lehetőséget a menüből.

「Keys」を選択

Jegyezze fel a megjelenő 1. kulcsot, és használja azt a hitelesítéshez. Úgy gondolom, hogy a két kulcs valószínűleg tartalék. Mellesleg, ha a kulcs valamilyen okból kifelé szivárog, akkor újra létrehozhatja a fenti "Regenerálás..." felirattal.

「KEY 1」をメモ

Ezzel befejeződik a beállítás az Azure oldalán.

Programozott módon fér hozzá az API-hoz a szöveg fordításához

Most itt az ideje, hogy ténylegesen hozzon létre egy programot, hogy lefordíthassa a szöveget. A Visual Studio 2015-tel hozzon létre egy WPF-alkalmazást, és hozzon létre egy következőhöz hasonló képernyőt:

Írja be a szöveget a Feladó mezőbe, és a Nyelv mezőbe írja be, hogy melyik nyelvre szeretné konvertálni, hogy melyik nyelvre melyik nyelvre szeretne konvertálni. És ha rákattint a "Futtatás konvertálása" gombra, akkor a lefordított szöveget az alábbi "Cél" -ban láthatja.

XAML (MainWindow.xaml)

Ez nem befolyásolja közvetlenül a fordítást, így csak a kód szerepel benne.

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

Hozzáférési jogkivonat beszerzése (MainWindow.xaml.cs)

A szövegfordítás alapfolyamata a következő:

  1. Dobja be az 1. kulcsot az API-ba egy hozzáférési jogkivonat lekért értékéhez.
  2. A hozzáférési jogkivonat használatával dobja ki a szöveget a fordítószolgálatnak a lefordított szöveg lekéréséhez.
  3. Szükség esetén szerezze be újra a hozzáférési jogkivonatot

Jön a sor.

Először határozzunk meg egy metódust a hozzáférési jogkivonat lekéréséhez és a használat egyszerűvé tételéhez. Ha argumentumként átadja a korábban beszerzett 1. kulcsot, lekért hozzáférési jogkivonatot. Szinkron feldolgozással is beszerezhető, de mivel a C# 5.0 aszinkron/várakozás használható, tegyük könnyen aszinkron folyamattá.

Pontként állítsa az URL-címet Endpoint + "/issueToken" értékre az Azure-ban megerősített módon, és állítsa be az "Ocp-Apim-Subscription-Key" paranccsal kapott 1. kulcsot az elküldendő fejléc kulcsaként.

Válaszként a hozzáférési jogkivonat sztringje úgy szerezhető be, ahogy van, így a rendszer visszatérési értékként használja. Egyébként ez a hozzáférési jogkivonat csak 10 percig érvényes.

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

Hozzáférés a szövegfordítás API-jához (MainWindow.xaml.cs)

Ez is egy olyan módszer, amely megkönnyíti a használatát. Az argumentumok lehetővé teszik a kapott hozzáférési jogkivonat és a lefordítandó szöveg megadását, valamint azt, hogy melyik nyelvre melyik nyelvre kell konvertálni.

Vegye figyelembe, hogy az Ön által elért URL-cím eltér attól az URL-címtől, ahol a jogkivonatot beszerezte. A lefordítandó szöveget és nyelvet a rendszer lekérdezési sztringként küldi el az URL-címben, ezért előzetesen kerülje el őket az "Uri.EscapeDataString" használatával.

A GET metódus ezután elküldi a fejléc authorizationjét a "Bearer" sémával és a paraméterben található jogkivonattal.

Mivel a válasz XML formátumban történik, a rendszer az XDocument segítségével olvassa be a lefordított szöveget. Ha azonban a szöveg XML escape-karaktereket tartalmaz, például azért, mert XML-t használ, előfordulhat, hogy escape-karakterek maradnak. Szükség szerint alakítsa át.

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

Gombvégrehajtási folyamat (MainWindow.xaml.cs)

Miután két módszert vezetett be, mindössze annyit kell tennie, hogy felhívja mindegyiket. A szöveget a KEY1 beállításával és az egyes metódusok beírt értékének megadásával fordíthatja le. Mivel ez egy aszinkron folyamat, kérjük, adjon hozzá aszinkront a gombkezelési módszerhez.

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

Lefordítható nyelvek listája

Érdemes lehet a következő Micorsoft oldalakra hivatkozni: Mivel ez az egyik felhőszolgáltatás, bármikor megváltoztatható.