DeepL APIを使用して、主言語に入力した文章を自動で翻訳し副言語に追加する
概要
Kurocoはカスタム処理を利用して、任意の処理を管理画面に追加できます。 このチュートリアルでは、例としてDeepL APIを利用して、新規追加したコンテンツを自動で翻訳し副言語のコンテンツとして登録する方法を紹介します。
DeepL APIを使用することでHTMLタグの構成をそのままに文章のみの翻訳が可能です。
また、DeepLの用語集の機能を利用して、翻訳の結果をチューニングします。
学べること
以下の流れで自動翻訳機能を実装します。
前提条件
機能はDeepL APIのドキュメントを元に作成しています。
DeepL APIの仕様は公式ドキュメント - DeepL APIを参照してください。
認証キーの取得・登録をする
DeepL APIの申込をして認証キーを取得する
まずはDeepL APIにアクセスし、DeepLに登録します。
1か月に500,000文字までの翻訳であれば、無料版で構いません。
登録が完了したらDeepL Proのアカウント情報ページにアクセスします。
アカウント情報下部にDeepL APIで使用する認証キーが表示されているので、これをコピーします。
Kuroco管理画面に認証キーを登録する
Kurocoの管理画面にアクセスし、[環境設定] -> [シークレット]をクリックします。
[追加]をクリックします。
以下のように入力して、[追加する]をクリックします。
項目 | 値 |
---|---|
名前 | DEEPL_API_KEY |
値 | DeepL APIで使用する認証キー |
以上でDeepL APIを利用する準備が整いました。
多言語の設定をする
Kurocoの管理画面にアクセスし、[環境設定] -> [ローカライズ]をクリックします。
本チュートリアルでは、主言語を日本語[ja]、副言語を英語[en]として進めます。
以下の設定をして、[更新する]をクリックします。
項目 | 値 |
---|---|
有効にする | チェックを入れる |
主言語 | 日本語[ja] |
副言語 | 英語[en] |
以上で多言語の設定は完了です。
コンテンツ定義を作成する
翻訳の結果をチューニングするための用語集を登録するコンテンツ定義と、自動翻訳の対象となるコンテンツ定義を登録します。
コンテンツ定義一覧ページで[追加]をクリックして、以下2つのコンテンツ定義を作成します。
用語集
用語集を使って語句の訳し方を指定すれば、翻訳後の編集に時間をかけなくても一貫性のある訳文を作成できます。
https://www.deepl.com/ja/blog/translate-your-way-with-the-deepl-glossary
DeepLの用語集をKurocoのコンテンツで管理するため、用語集のコンテンツ定義を作成します。
用語集のコンテンツ定義では、日本語と英語のペアの繰り返し項目と、DeepLの用語集IDを登録するテキスト項目を登録します。
以下のようになります。
ID | 親項目 | 項目名 | 項目設定 |
---|---|---|---|
1 | 親項目名:Language pairs 親項目識別子:glossary 繰り返し回数:30 | 項目名:JA 識別子:source_lang | テキスト |
2 | JAを選択 | 項目名:EN 識別子:target_lang | テキスト |
3 | 選択なし | 項目名:glossary_id 識別子:glossary_id | テキスト |
グループの設定はコンテンツ定義追加時にできませんので、一度各項目を追加した後に親項目と繰り返し回数の設定をしてください。
項目の繰り返し回数はデフォルトで30が最大値となりますが、管理画面で最大99まで変更可能です。
また、用語集は1つのコンテンツを更新して使うため、元となるコンテンツを1つ登録しておきます。
コンテンツ一覧ページで[追加]をクリックします。
例として以下のように登録します。
ここで設定した言語のペアがDeepLに翻訳リクエストを送る際の語句の訳し方の指定になります。
例えば記事という単語は通常、Articleと訳されますが、これにより、Contentと訳すように指定できます。
項目 | 値 |
---|---|
Slug | glossary |
タイトル | 用語集 |
Language pairs 1 | JA:記事 EN:Content |
Language pairs 2 | JA:副言語 EN:Secondary languages |
glossary_id | 空欄 |
入力ができたら[追加する]をクリックして、コンテンツを登録します。
自動翻訳コンテンツ
自動翻訳の対象となるコンテンツ定義は、Wysiwygのみのシンプルな設定にします。
以下のようになります。
ID | 親項目 | 項目名 | 項目設定 |
---|---|---|---|
1 | 選択なし | 項目名:WYSIWYG 識別子:source_text | WYSIWYG |
APIを作成する
内部処理用のAPI作成
Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずは内部利用のためのAPIを新規で作成します。
既に追加済みの場合は次のステップに進んで構いません。
APIの作成
Kuroco管理画面のAPIより「追加」をクリックします。
API作成画面が表示されるので、下記入力し「追加する」をクリックします。
項目 | 設定内容 |
---|---|
タイトル | Internal |
版 | 1.0 |
ディスクリプション | 内部処理用のAPI |
APIが作成されました。
セキュリティの設定
次にセキュリティの設定をします。[セキュリティ] をクリックします。
セキュリティを[動的アクセストークン]に設定して、[保存する]をクリックします。
セキュリティを[動的アクセストークン]に設定後、Login::token
のエンドポイントが無い場合、利用をお勧めされますが、内部利用のみの場合は無視して構いません。
CORSの設定
次にCORSの設定をします。[CORSを設定する] をクリックします。
CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。
- 管理画面URL
CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。
- GET
- POST
- OPTIONS
CORS_ALLOW_CREDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。
問題なければ [保存する] をクリックします。
エンドポイントの作成
エンドポイントは「用語集を取得するエンドポイント」「用語集を更新するエンドポイント」「副言語を更新するエンドポイント」の3つを作成します。
InternalのAPIから[新しいエンドポイントの追加]をクリックしてそれぞれ作成します。
用語集を取得するエンドポイント
項目 | 設定内容 |
---|---|
パス | get_glossary |
カテゴリー | コンテンツ |
モデル | Topics |
オペレーション | details |
topics_group_id | 用語集のコンテンツ定義ID(8) |
ext_group | チェックを入れる |
用語集を更新するエンドポイント
項目 | 設定内容 |
---|---|
パス | update_glossary |
カテゴリー | コンテンツ |
モデル | Topics |
オペレーション | update |
topics_group_id | 用語集のコンテンツ定義ID(8) |
副言語を更新するエンドポイント
項目 | 設定内容 |
---|---|
パス | update_content |
カテゴリー | コンテンツ |
モデル | Topics |
オペレーション | update |
topics_group_id | 自動翻訳コンテンツのコンテンツ定義ID(9) |
カスタム処理を作成する
コンテンツとエンドポイントの準備ができたら、DeepLと連携して翻訳する処理をカスタム処理に書いていきます。
[オペレーション] -> [カスタム処理]をクリックします。
[追加]をクリックして、「用語集の登録・削除をするカスタム処理」と、「コンテンツの翻訳をして副言語に登録するカスタム処理」の2つを作成します。
用語集の登録・削除をするカスタム処理
DeepLに登録する用語集は更新が許可されていないので、都度、削除・更新をする運用となります。
先ほど作成した用語集
のコンテンツ更新をトリガにして、DeepLの既存用語集を削除し、更新された翻訳のペアを再登録する処理とします。
以下のように設定します。
項目 | 値 |
---|---|
タイトル | deepl_manage_glossary |
識別子 | deepl_manage_glossary |
トリガ | コンテンツの更新後/用語集のコンテンツ定義ID(8) |
処理 | 以下の内容 |
loading...
/rcms-api/3/get_glossary/
の部分はご自身のエンドポイントのURLに置き換えてください。
トリガがループするような使い方をする場合は、処理がループすることを防ぐため、以下のコードをカスタム処理の先頭に記述します。
{if $smarty.server.HTTP_RCMS_X_API_REQUEST_CNT > 0}
{return}
{/if}
APIの無限ループ対策が実施されているため、この記述がなくてもループは停止しますが、設定されている制約により、トリガは2回作動します。
詳しくはコンテンツ更新後のトリガが二重に呼ばれるのはなぜですか?を参照してください。
入力ができたら[追加する]をクリックしてカスタム処理を追加します。
コンテンツの翻訳をして副言語に登録するカスタム処理
コンテンツの翻訳をして副言語に登録するカスタム処理は、コンテンツの追加をトリガとして動作させます。
追加されたコンテンツをDeepLに送り、翻訳されたHTMLを副言語に追加します。
tag_handlingパラメータをhtmlに設定してDeepLにリクエストを送ることで、HTMLタグを考慮した翻訳をしています。
詳しくはHTML Handlingを参照してください。
Kurocoの副言語を更新する場合は、_doc_lang
パラメータをクエリで指定します。
以下のように設定します。
項目 | 値 |
---|---|
タイトル | deepl_translate |
識別子 | deepl_translate |
トリガ | コンテンツの追加後/自動翻訳コンテンツのコンテンツ定義ID(9) |
処理 | 以下の内容 |
loading...
入力ができたら[追加する]をクリックしてカスタム処理を追加します。
動作確認をする
以上で自動翻訳の設定は完了です。コンテンツを更新・追加して動作の確認をします。
用語集
まずは、用語集のコンテンツを更新します。
任意のLanguage pairsを追加し、glossary_id は空のまま更新します。
更新後、glossary_idが自動で追加され、カスタムログに用語集追加完了のログが残ります。
以降の更新もglossary_idは手動で編集する必要はありません。 DeepLの用語集登録時に自動で更新されます。
glossary_idは手動で更新しないので、実際の運用時はコンテンツ編集画面の表示を変更できますか?を参考に非表示にするCSSを適用するのも有効です。
コンテンツの自動翻訳
次に、コンテンツの自動翻訳の動作を確認します。
自動翻訳コンテンツ一覧のページから[追加]をクリックします。
任意の日本語のコンテンツを入力し、[追加する]をクリックします。
追加後のコンテンツを確認すると、副言語のコンテンツが同時に追加されていることが分かります。
また、翻訳の内容を確認すると用語集で登録した通り、記事をContent、副言語をSecondary languagesと訳していることが分かります。
以上で、DeepL APIを利用した自動翻訳機能の実装方法の紹介を終わります。
DeepL APIはPDFやWordファイルをそのまま翻訳するTranslate Documentsの機能も持っていますので、本ドキュメントを参考にトライしてみてください。
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。