windows

DeepLを利用した翻訳 C#

DeepLを利用した翻訳 C#

翻訳後テキストの読み上げと音声保存を追加

読み上げは、日本語と英語に対応します。

AI による記述

DeepL APIは、高品質なAI翻訳機能をウェブサイト、アプリケーション、社内システムなどに組み込むための開発者向けインターフェースです。ニューラルネットワーク技術を活用した自然で精度の高い翻訳が特徴で、無料で試せるプランとビジネス向けの有料プランが提供されています。 

DeepL APIの主な特徴

  • 高い翻訳品質: 文脈を理解した自然な翻訳を提供し、特にヨーロッパ言語や日本語、中国語などで高い評価を得ています。
  • 多様な連携: Python、Node.js、Java、PHP、Ruby、.NETなど、主要なプログラミング言語に対応した公式ライブラリが提供されています。
  • ファイル翻訳: テキストだけでなく、PDF、Word(.docx)、PowerPoint(.pptx)、HTMLなどの文書ファイル形式をレイアウトを保持したまま翻訳できます。
  • セキュリティ: 有料プランでは、翻訳されたテキストがDeepLのサーバーに保存されず、翻訳後すぐに削除されるため、機密情報を扱うビジネス用途でも安心して利用できます(ISO 27001認証、GDPR準拠など)。
  • カスタマイズ性: 特定の用語や固有名詞の翻訳を一貫させるための「用語集」機能や、文体(敬称・親称)を調整する機能が利用可能です。 

プランと料金体系

DeepL APIを利用するためのプランは主に2種類あります。 

プラン名 特徴料金
DeepL API Free月間50万文字まで無料で翻訳可能。個人開発や小規模なプロジェクトの検証に適しています。月額0円
DeepL API Pro翻訳文字数に制限がなく、高度なセキュリティ対策が施されています。商用利用や大規模なシステム連携向けです。月額基本料金+従量課金制(例:月額630円+100万文字あたり2,500円)

※無料プランで翻訳したテキストは、DeepLのアルゴリズム改善のために利用される可能性があるため、機密データには有料プランが推奨されます。 

利用方法

DeepL APIを利用するには、まず公式サイトでアカウント登録し、APIキーを取得する必要があります。 

  1. アカウント登録DeepLの公式サイトで「開発者向け」プランを選択し、アカウントを作成します。本人確認のためクレジットカード情報の入力が必要ですが、無料プランでの課金はありません。
  2. APIキーの取得: アカウント情報ページから「認証キー」を取得します。
  3. 実装: 取得したAPIキーを使用して、HTTPリクエストを送信するか、公式ライブラリ(Python、JavaSctipt等)を導入してアプリケーションに翻訳機能を実装します。 

詳細な技術資料やクライアントライブラリについては、DeepL APIの公式ドキュメントを参照してください。 

AI は不正確な情報を表示することがあるため、生成された回答を再確認するようにしてください。

アカウント情報ページ

Form1.cs(デザイン)

Newtonsoft.Json のインストール

C# で簡単に JSON を扱いたいので、外部ライブラリをインストールします。VisualStudio の「NuGet パッケージの管理」から外部ライブラリのインストール画面を開いて、「Newtonsoft.Json」を探してインストール。

テキスト読み上げのために、System.Speech をインストール。

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Http.Headers;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

using System.Speech.Synthesis;

namespace DeepL_Trans
{
    public partial class Form1 : Form
    {
        
        //翻訳言語の設定
        String[] Gengo = new String[120] {"01","AR","アラビア語",
            "02","BG","ブルガリア語","03","CS","チェコ語","04","DA","デンマーク語",
            "05","DE","ドイツ語","06","EL","ギリシャ語","07","EN","英語","08","EN-GB","英語(イギリス)",
            "09","EN-US","英語(アメリカ)","10","ES","スペイン語","11","ES-419","スペイン語(ラテンアメリカ)",
            "12","ET","エストニア語","13","FI","フィンランド語","14","FR","フランス語","15","HE","ヘブライ語(次世代モデルのみ)",
            "16","HU","ハンガリー語","17","ID","インドネシア語","18","IT","イタリア語","19","JA","日本語",
            "20","KO","韓国語","21","LT","リトアニア語","22","LV","ラトビア語","23","NB","ノルウェー語(ブークモール)",
            "24","NL","オランダ語","25","PL","ポーランド語","26","PT","ポルトガル語","27","PT-BR","ポルトガル語(ブラジル)",
            "28","PT-PT","ポルトガル語(ブラジルポルトガル語を除くすべてのポルトガル語の変種)","29","RO","ルーマニア語",
            "30","RU","ロシア語","31","SK","スロバキア語","32","SL","スロベニア語","33","SV","スウェーデン語",
            "34","TH","タイ語(次世代モデルのみ)","35","TR","トルコ語","36","UK","ウクライナ語",
            "37","VI","ベトナム語(次世代モデルのみ)","38","ZH","中国語",
            "39","ZH-HANS","中国語(簡体字)","40","ZH-HANT","中国語(繁体字)"};
        
        public Form1()
        {
            InitializeComponent();
            txtAPIKEY.Text = "aedxxxxxxxxxxxxxxxxxxxxxxxdcb5:fx";
            
            for (int i = 2; i <Gengo.Length; i=i+3)
            {
                // コンボボックスに項目を追加する
                comboBox1.Items.Add(Gengo[i]);
            }
            
            // 初期値を設定する(日本語を選択する)
            comboBox1.SelectedIndex = 18;

        }

        //翻訳 DeepL 使用
        private async void button1_Click(object sender, EventArgs e)
        {
            using (var httpClient = new HttpClient())
            {
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api-free.deepl.com/v2/translate"))
                {
                    var contentList = new List<string>();
                    contentList.Add("auth_key=" + txtAPIKEY.Text);
                    contentList.Add("text=" + textBox1.Text);

                    //翻訳言語指定
                    contentList.Add("target_lang=" + Gengo[comboBox1.SelectedIndex*3+1]);
                    
                    request.Content = new StringContent(string.Join("&", contentList));
                    request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");

                    var response = await httpClient.SendAsync(request);
                    var resBodyStr = response.Content.ReadAsStringAsync().Result;
                    JObject deserial = (JObject)JsonConvert.DeserializeObject(resBodyStr);
                   
                    // プロパティのトークンタイプが Null かどうかをチェック
                    if (deserial["translations"]?.Type == JTokenType.Null)
                    {
                        //Console.WriteLine("translations is null in JSON");
                        textBox2.Text = "translations is null in JSON";
                    }

                    // プロパティが存在しないか、あるいは null であるかを同時に判定
                    if (deserial["translations"] == null || deserial["translations"].Type == JTokenType.Null)
                    {
                        //Console.WriteLine("translations is null or missing");
                        textBox2.Text = "translations is null or missing";
                    }
                    else
                    {
                        textBox2.Text = deserial["translations"][0]["text"].ToString();
                    }
                }
            }
        }

       //終了
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //翻訳元消去
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
        }

        //翻訳後消去
        private void button4_Click(object sender, EventArgs e)
        {
            textBox2.Text = "";
        }

        //テキスト読み上げ
        private void button5_Click(object sender, EventArgs e)
        {
            SpeechSynthesizer synthesizer = new SpeechSynthesizer();
            synthesizer.SetOutputToDefaultAudioDevice();

            synthesizer.Speak(textBox2.Text);
            synthesizer.Dispose();
        }

        //音声保存
        private void button6_Click(object sender, EventArgs e)
        {

            using (SaveFileDialog dlg = new SaveFileDialog())
            {
                //日付取得
                DateTime dt = DateTime.Now;
                string result = dt.ToString("yyyyMMddHH_mmss");
                
                //ファイル名セット
                dlg.FileName = "voice" + result + ".wav";                                      
                dlg.InitialDirectory = "d:";
                dlg.Filter = "wav|*.wav";            //wavファイルをwavファイル以外のファイルをダイアログに表示しない
                dlg.FilterIndex = 0;
                
                //ダイアログを開く
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    SpeechSynthesizer synthesizer = new SpeechSynthesizer();
                    synthesizer.SetOutputToWaveFile(dlg.FileName); // wavとして保存する
                    synthesizer.Speak(textBox2.Text);
                    //メッセージボックスを表示する
                    MessageBox.Show("音声出力終了",
                        "エラー",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                    synthesizer.Dispose();
                }
            }
            
        }
    }
}

-windows

PAGE TOP