Programozott fordítás szöveg a Translator Text API használatával
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.
A kibontott menüben válassza a Cognitive Services API-k (előzetes verzió) lehetőséget.
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.
Válassza a Translator Text API lehetőséget az API-k listájából.
Ezután válassza a Tarifacsomag lehetőséget.
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.
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.
Válassza a Kulcsok lehetőséget a menüből.
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.
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ő:
- Dobja be az 1. kulcsot az API-ba egy hozzáférési jogkivonat lekért értékéhez.
- 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.
- 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ó.