ترجمه برنامه ای متن با استفاده از API متن مترجم

تاریخ ایجاد صفحه :

چه چیزی را پیشاپیش آماده سازیم

از قبل یک حساب Microsoft Azure ایجاد کنید. رویه ایجاد در این صفحه شرح داده شده است.

همچنین، این بار ما با نسخه رایگان ثبت نام، بنابراین لطفا آن را به موقع تغییر دهید اگر شما می خواهید به استفاده از نسخه پرداخت می شود.

ایجاد منابع API

پورتال Microsoft Azure را باز کنید و روی New در منوی سمت چپ کلیک کنید.

「新規」をクリック

هوش + تجزیه و تحلیل را از منوی گسترش یافته انتخاب کنید.

「Intelligence + analytics」を選択

از منوی گسترش یافته، APIs خدمات شناختی (پیش نمایش) را انتخاب کنید.

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

هنگامی که صفحه ایجاد ظاهر می شود، نامی از انتخاب خود را وارد کنید (نام نمایش در داشبورد خواهد بود) و "محاکمه رایگان" را برای اشتراک انتخاب کنید. سپس روی نوع API کلیک کنید.

API type をクリック

مترجم متن API را از لیست API ها انتخاب کنید.

「Translator Text API」を選択

سپس ردیف قیمت گذاری را انتخاب کنید.

Pricing tier を選択

از آنجا که شما با استفاده از نسخه رایگان، کلیک کنید "F0 رایگان" و کلیک کنید "انتخاب" را فشار دهید. نسخه رایگان می تواند تا ۲ میلیون کاراکتر در ماه تبدیل شود.

「F0 Free」を選択

اگر برای اولین بار سرویسی را ثبت می کنید، یک گروه منابع جدید ایجاد کنید. شما می توانید منابعی را که ایجاد می کنید در گروه هایی از هر نامی گروه بندی کنید.

مکان مکانی برای قرار دادن سرویس است. در هنگام توسعه عمدتاً در ژاپن، در صورت نصب در یک ژاپن، احتمال بهبود عملکرد بیشتر است.

در نهایت، "پین به داشبورد" را بررسی کنید و روی دکمه "ایجاد" کلیک کنید.

作成

داشبورد دارای منبعی است که قبلاً ایجاد کرده اید، بنابراین برای باز کردن آن روی آن کلیک کنید.

リソースを開く

من فکر می کنم بررسی اجمالی باز است، بنابراین آدرس اینترنتی برای "نقطه پایانی" در سمت راست را بررسی کنید. این آدرس API است که ابتدا باید با احراز هویت به آن دسترسی پیدا کرد. با این حال به ندرت تغییر می کند و در برنامه ای توصیف می شود که بعدا معرفی خواهم کرد، بنابراین خوب است به یاد داشته باشید که برای زمان بودن اینجاست.

Endpoint

کلیدها را از منو انتخاب کنید.

「Keys」を選択

توجه داشته باشید از کلید 1 که ظاهر می شود و استفاده از آن را به تصدیق. من فکر می کنم داشتن دو کلید احتمالا یک ذخیره است. به هر حال، اگر کلید به دلایلی به بیرون نشت کند، می توانید آن را با «بازسازی...» بالا بازآفرینی کنید.

「KEY 1」をメモ

این نتیجه گیری راه اندازی در سمت Azure.

دسترسی برنامه ای به API برای ترجمه متن

حالا وقت آن رسیده است که در واقع یک برنامه ایجاد کنید تا شما می توانید متن را ترجمه کنید. استفاده از ویژوال استودیو 2015 برای ایجاد یک برنامه WPF و ایجاد یک صفحه نمایش است که به نظر می رسد مانند این:

متن را وارد کنید از, و در زبان, وارد کنید که زبان شما می خواهید برای تبدیل به کدام زبان. و اگر بر روی دکمه "تبدیل اجرا" کلیک کنید، قادر خواهید بود متن ترجمه شده را در "مقصد" زیر ببینید.

يين ويندوز (MainWindow.

به طور مستقیم بر ترجمه تأثیر نمی گذارد، بنابراین تنها کد گنجانده شده است.

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

دریافت نشانه دسترسی (MainWindow..cs)

جریان اساسی برای ترجمه متن به صورت زیر است:

  1. پرتاب کلید 1 را به API برای دریافت نشانه دسترسی.
  2. برای دریافت متن ترجمه شده از نشانه دسترسی برای پرتاب متن به سرویس ترجمه استفاده کنید.
  3. دریافت نشانه دسترسی دوباره در صورت نیاز

به آن می رسد.

ابتدا بیایید روشی را تعریف کنیم تا یک توکن دسترسی دریافت کنیم و استفاده از آن آسان شود. اگر کلید 1 به دست آمده زودتر به عنوان استدلال را تصویب کنید، می توانید نشانه دسترسی را دریافت کنید. همچنین می توان آن را با پردازش سنکرون به دست می آید، اما از آنجا که C# 5.0 پوند در انتظار می تواند مورد استفاده قرار گیرد، بیایید آن را به راحتی یک فرایند ناهمزمان کنیم.

به عنوان یک نقطه، URL را به نقطه پایانی + "/issueToken" به عنوان تایید شده در Azure تنظیم کنید، و کلید 1 به دست آمده با "Ocp-Apim-Subscription-Key" را به عنوان کلید در هدر ارسال کنید.

به عنوان یک پاسخ، رشته نشانه دسترسی را می توان به عنوان آن به دست می آید، بنابراین آن را به عنوان مقدار بازگشت استفاده می شود. به هر حال، این توکن دسترسی تنها به مدت ۱۰ دقیقه معتبر است.

/// <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 برای ترجمه متن (MainWindow..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..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);
}

فهرست زبان های قابل ترجمه

ممکن است بخواهید به صفحات زیر Micorsoft مراجعه کنید: از آنجا که یکی از سرویس های ابری است، ممکن است در هر زمان تغییر کند.