使用翻译器文本 API 从程序翻译文本
要提前准备的内容
请提前创建 Microsoft Azure 帐户。 本页将解释创建说明。
此外,由于我们注册了免费版本,如果您想使用付费版本,请及时更改。
为 API 创建资源
打开 Microsoft Azure 门户屏幕,然后单击左侧菜单中的“新建”。
从展开的菜单中选择“智能 + 分析”。
此外,从展开的菜单中选择“认知服务APIS(预览)”。
此时将显示“创建”屏幕,输入任何帐户名称(在仪表板中显示为名称),然后选择“免费试用”以订阅。 然后,单击 API 类型。
从 API 列表中选择翻译文本 API。
然后选择“优先级”。
要使用免费版本,请单击“F0 免费”,然后单击“选择”按钮。 免费版本每月最多可转换 200 万个字符。
如果这是您第一次注册服务,请创建新的资源组。 您可以将资源分组到具有任何名称的组中。
位置是放置服务的位置。 如果主要在日本部署,则在日本安装可能会提高性能。
最后,选中“固定到仪表板”,然后单击“创建”按钮。
单击以打开仪表板,因为您刚刚创建了资源。
我认为 Overview 处于打开状态,因此请检查右侧的“终结点”URL。 这是首先要通过身份验证访问的 API 的 URL。 但是,它很少更改,并且它列在稍后介绍的程序中,因此只需记住它就在这里。
从菜单中选择“键”。
记下显示的“KEY 1”。使用此密钥进行身份验证。 我认为有两个密钥可能是备用的。 顺便说一下,如果密钥由于任何原因泄露到外部,则可以使用上面的“恢复...”重新创建它。
这是 Azure 端设置的结束。
以编程形式访问 API 以翻译文本
现在,您可以实际编写程序来翻译文本。 使用 Visual Studio 2015 创建 WPF 应用程序,并创建类似于以下内容的屏幕:
在“源”中输入文本,在“语言”中键入要从何种语言转换为哪些语言。 然后单击“运行转换”按钮,您将看到翻译的文本到下面的“目标”。
XAML (MainWindow.xaml)
它对翻译没有直接影响,因此请只提供代码。
<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>
获取访问令牌(主窗口.xaml.cs)
作为文本翻译的基本流程
- 将密钥 1 扔到 API 以获取访问令牌。
- 使用访问令牌将文本扔到翻译服务以获取翻译的文本。
- 根据需要再次获取访问令牌
它成为。
首先,让我们定义一个方法来获取访问令牌,使其更易于使用。 现在,您可以通过将刚刚获取的 KEY 1 传递给参数来获取访问令牌。 同步过程也可以检索,但从 C# 5.0 开始,可以使用异步/await,因此让我们轻松异步。
将 URL 设置为 Azure 确认的终结点 +“/问题工具”,并将 KEY 1 设置为要发送的标头的密钥,并将“Ocp-Apim-订阅密钥”设置为键。
作为响应,您可以按原样获取访问令牌字符串,并将其作为返回值。 顺便说一下,此访问令牌仅在 10 分钟内有效。
<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;
}
}
}
访问 API 进行文本翻译(主窗口.xaml.cs)
这也是一个方法,易于使用。 允许您指定从哪个语言转换为哪些语言,以及为参数获取的访问令牌和要翻译的文本。
请注意,您访问的 URL 与获取令牌的 URL 不同。 由于要翻译的文本和语言将作为 URL 的查询字符串发送,因此请提前使用 Uri.EscapeDataString 转义它。
然后,使用 GET 方法将架构“Bearer”和参数的令牌设置为标头授权并发送。
由于响应以 XML 格式检索,因此 XDocument 用于检索翻译后的文本。 但是,如果文本包含 XML 转义字符,可能是因为它使用 XML,但它可能保持转义状态。 根据需要进行转换。
<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;
}
}
}
按钮执行处理 (MainWindow.xaml.cs)
实现两个方法后,只需调用每个方法即可。 您可以通过为每个方法指定 KEY1 和输入的值来翻译文本。 由于它是异步的,因此请为按钮处理方法添加异步。
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);
}
可翻译语言列表
请参阅以下米科索夫页面: 因为它是云服务之一,它可能会不时更改。