メインコンテンツまでスキップ

DeepL APIを使用して、主言語に入力した文章を自動で翻訳し副言語に追加する

概要

Kurocoはカスタム処理を利用して、任意の処理を管理画面に追加できます。 このチュートリアルでは、例としてDeepL APIを利用して、新規追加したコンテンツを自動で翻訳し副言語のコンテンツとして登録する方法を紹介します。

DeepL APIを使用することでHTMLタグの構成をそのままに文章のみの翻訳が可能です。
また、DeepLの用語集の機能を利用して、翻訳の結果をチューニングします。

学べること

以下の流れで自動翻訳機能を実装します。

前提条件

備考

機能はDeepL APIのドキュメントを元に作成しています。
DeepL APIの仕様は公式ドキュメント - DeepL APIを参照してください。

認証キーの取得・登録をする

DeepL APIの申込をして認証キーを取得する

まずはDeepL APIにアクセスし、DeepLに登録します。

1か月に500,000文字までの翻訳であれば、無料版で構いません。

Image from Gyazo

登録が完了したらDeepL Proのアカウント情報ページにアクセスします。
アカウント情報下部にDeepL APIで使用する認証キーが表示されているので、これをコピーします。

Image from Gyazo

Kuroco管理画面に認証キーを登録する

Kurocoの管理画面にアクセスし、[環境設定] -> [シークレット]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のように入力して、[追加する]をクリックします。

項目
名前DEEPL_API_KEY
DeepL APIで使用する認証キー

Image from Gyazo

以上でDeepL APIを利用する準備が整いました。

多言語の設定をする

Kurocoの管理画面にアクセスし、[環境設定] -> [ローカライズ]をクリックします。

Image from Gyazo

本チュートリアルでは、主言語を日本語[ja]、副言語を英語[en]として進めます。
以下の設定をして、[更新する]をクリックします。

項目
有効にするチェックを入れる
主言語日本語[ja]
副言語英語[en]

Image from Gyazo

以上で多言語の設定は完了です。

コンテンツ定義を作成する

翻訳の結果をチューニングするための用語集を登録するコンテンツ定義と、自動翻訳の対象となるコンテンツ定義を登録します。
コンテンツ定義一覧ページで[追加]をクリックして、以下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
テキスト
2JAを選択項目名:EN
識別子:target_lang
テキスト
3選択なし項目名:glossary_id
識別子:glossary_id
テキスト

Image from Gyazo

Image from Gyazo

ヒント

グループの設定はコンテンツ定義追加時にできませんので、一度各項目を追加した後に親項目と繰り返し回数の設定をしてください。

ヒント

項目の繰り返し回数はデフォルトで30が最大値となりますが、管理画面で最大99まで変更可能です。

また、用語集は1つのコンテンツを更新して使うため、元となるコンテンツを1つ登録しておきます。

コンテンツ一覧ページで[追加]をクリックします。

Image from Gyazo

例として以下のように登録します。
ここで設定した言語のペアがDeepLに翻訳リクエストを送る際の語句の訳し方の指定になります。

例えば記事という単語は通常、Articleと訳されますが、これにより、Contentと訳すように指定できます。

項目
Slugglossary
タイトル用語集
Language pairs 1JA:記事
EN:Content
Language pairs 2JA:副言語
EN:Secondary languages
glossary_id空欄

Image from Gyazo

入力ができたら[追加する]をクリックして、コンテンツを登録します。

自動翻訳コンテンツ

自動翻訳の対象となるコンテンツ定義は、Wysiwygのみのシンプルな設定にします。
以下のようになります。

ID親項目項目名項目設定
1選択なし項目名:WYSIWYG
識別子:source_text
WYSIWYG

Image from Gyazo

Image from Gyazo

APIを作成する

内部処理用のAPI作成

Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずは内部利用のためのAPIを新規で作成します。
既に追加済みの場合は次のステップに進んで構いません。

APIの作成

Kuroco管理画面のAPIより「追加」をクリックします。

Image from Gyazo

API作成画面が表示されるので、下記入力し「追加する」をクリックします。

Image from Gyazo

項目設定内容
タイトルInternal
1.0
ディスクリプション内部処理用のAPI

APIが作成されました。

Image from Gyazo

セキュリティの設定

次にセキュリティの設定をします。[セキュリティ] をクリックします。

Image from Gyazo

セキュリティを[動的アクセストークン]に設定して、[保存する]をクリックします。

Image from Gyazo

セキュリティを[動的アクセストークン]に設定後、Login::tokenのエンドポイントが無い場合、利用をお勧めされますが、内部利用のみの場合は無視して構いません。

Image from Gyazo

CORSの設定

次にCORSの設定をします。[CORSを設定する] をクリックします。

Image from Gyazo

CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。

  • 管理画面URL

CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。

  • GET
  • POST
  • OPTIONS

CORS_ALLOW_CREDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。

Image from Gyazo

問題なければ [保存する] をクリックします。

エンドポイントの作成

エンドポイントは「用語集を取得するエンドポイント」「用語集を更新するエンドポイント」「副言語を更新するエンドポイント」の3つを作成します。

InternalのAPIから[新しいエンドポイントの追加]をクリックしてそれぞれ作成します。

Image from Gyazo

用語集を取得するエンドポイント

項目設定内容
パスget_glossary
カテゴリーコンテンツ
モデルTopics
オペレーションdetails
topics_group_id用語集のコンテンツ定義ID(8)
ext_groupチェックを入れる

Image from Gyazo

Image from Gyazo

用語集を更新するエンドポイント

項目設定内容
パスupdate_glossary
カテゴリーコンテンツ
モデルTopics
オペレーションupdate
topics_group_id用語集のコンテンツ定義ID(8)

Image from Gyazo

Image from Gyazo

副言語を更新するエンドポイント

項目設定内容
パスupdate_content
カテゴリーコンテンツ
モデルTopics
オペレーションupdate
topics_group_id自動翻訳コンテンツのコンテンツ定義ID(9)

Image from Gyazo

Image from Gyazo

カスタム処理を作成する

コンテンツとエンドポイントの準備ができたら、DeepLと連携して翻訳する処理をカスタム処理に書いていきます。

[オペレーション] -> [カスタム処理]をクリックします。

Image from Gyazo

[追加]をクリックして、「用語集の登録・削除をするカスタム処理」と、「コンテンツの翻訳をして副言語に登録するカスタム処理」の2つを作成します。

Image from Gyazo

用語集の登録・削除をするカスタム処理

DeepLに登録する用語集は更新が許可されていないので、都度、削除・更新をする運用となります。

先ほど作成した用語集のコンテンツ更新をトリガにして、DeepLの既存用語集を削除し、更新された翻訳のペアを再登録する処理とします。

以下のように設定します。

項目
タイトルdeepl_manage_glossary
識別子deepl_manage_glossary
トリガコンテンツの更新後/用語集のコンテンツ定義ID(8)
処理以下の内容
deepl_manage_glossary
loading...

Image from Gyazo

注意

/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)
処理以下の内容
deepl_translate
loading...

Image from Gyazo

入力ができたら[追加する]をクリックしてカスタム処理を追加します。

動作確認をする

以上で自動翻訳の設定は完了です。コンテンツを更新・追加して動作の確認をします。

用語集

まずは、用語集のコンテンツを更新します。
任意のLanguage pairsを追加し、glossary_id は空のまま更新します。
更新後、glossary_idが自動で追加され、カスタムログに用語集追加完了のログが残ります。

Image from Gyazo

Image from Gyazo

以降の更新もglossary_idは手動で編集する必要はありません。 DeepLの用語集登録時に自動で更新されます。

ヒント

glossary_idは手動で更新しないので、実際の運用時はコンテンツ編集画面の表示を変更できますか?を参考に非表示にするCSSを適用するのも有効です。

コンテンツの自動翻訳

次に、コンテンツの自動翻訳の動作を確認します。
自動翻訳コンテンツ一覧のページから[追加]をクリックします。

Image from Gyazo

任意の日本語のコンテンツを入力し、[追加する]をクリックします。

Image from Gyazo

追加後のコンテンツを確認すると、副言語のコンテンツが同時に追加されていることが分かります。

Image from Gyazo

また、翻訳の内容を確認すると用語集で登録した通り、記事をContent、副言語をSecondary languagesと訳していることが分かります。

以上で、DeepL APIを利用した自動翻訳機能の実装方法の紹介を終わります。
DeepL APIはPDFやWordファイルをそのまま翻訳するTranslate Documentsの機能も持っていますので、本ドキュメントを参考にトライしてみてください。

関連ドキュメント


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。