サイトやコンテンツタイプが異なる場合の翻訳(連載 4/5)クロスサイト・クロスコンテンツタイプ 翻訳
目次
サイトやコンテンツタイプが異なる場合の翻訳(連載 4/5)クロスサイト・クロスコンテンツタイプ 翻訳
AITranslator v1.5.0 の連載第 4 回です。今回はサイト間翻訳の実運用で必要になる 3 つの機能をまとめて取り上げます。
- 異なるコンテンツタイプ間(クロスコンテンツタイプ)翻訳の正式サポート
- サイト間のカテゴリ/フォルダ/カテゴリセットマッピング
- 選択肢フィールド(セレクトボックス/ラジオボタン/チェックボックス)の値マッピング
これらは、単一サイト内で翻訳する場合には使わない機能ですが、多言語サイトを本格的に構築する際にはほぼ確実に必要になります。
多言語サイトの 2 つのアプローチ
MT で多言語サイトを構築する方法は、大きく 2 つに分けられます。
- 1 サイト内で複数言語を混在させる: 同じブログに日本語記事と英語記事を入れ、カテゴリやテンプレートで言語を切り替える
- 言語ごとにサイトを分ける: 「日本語サイト」と「英語サイト」をブログとして別々に作成し、相互にリンクする
AITranslator はどちらにも対応していますが、運用の柔軟性という観点では、2 番目の「言語ごとにサイトを分ける」アプローチの方が、URL 設計やテンプレートのシンプルさで有利だと考えています。
ただし、サイトを分けると「翻訳先サイトのカテゴリと翻訳元サイトのカテゴリは別物」「コンテンツタイプも別々に作成している」というケースが一般的になります。この点が v1.4 までは扱いにくいところでした。v1.5.0 でまとめて整備しましたので、順にご紹介します。
クロスコンテンツタイプ 翻訳の正式サポート
最も大きな変更点が、「異なるコンテンツタイプ間の翻訳」が安定して動作するようになったことです。
翻訳設定画面の「コンテンツタイプ設定」で、翻訳元と翻訳先のコンテンツタイプを別々に指定できます。
たとえば、次のような構成です。
- 翻訳元コンテンツタイプ: 「Site Page」(日本語サイトに所属)
- 翻訳先コンテンツタイプ: 「Site Page (de)」(ドイツ語サイトに所属、フィールド構造はほぼ同じ)
翻訳実行時の AITranslator の動作は、コンテンツタイプ が同じか異なるかで分かれます。
| 状況 | 動作 |
|---|---|
| 同じコンテンツタイプ(翻訳元 = 翻訳先) | 元の data を丸ごとコピーしてから、翻訳対象フィールドを上書き |
| 異なるコンテンツタイプ | 翻訳対象フィールドはマッピング経由で翻訳。非翻訳フィールド(数値・URL・日付など)はコピー対象フィールドマッピング(明示)または自動マッチ(フォールバック)で引き継ぎ |
異なるコンテンツタイプ の場合に「非翻訳フィールドの値が引き継がれない」という点が v1.4 までの大きな課題でしたが、これは連載第 2 回でご紹介した コピー対象フィールドマッピング で解決しています。
なお、「翻訳元コンテンツタイプ には存在するが翻訳先コンテンツタイプ には存在しないフィールド」は、保存先のカラムが物理的に存在しないため、値は破棄されます。これは MT の仕様上避けられないため、必要なフィールドは翻訳先コンテンツタイプ にも作成しておいてください。
サイト間のカテゴリ/フォルダ/カテゴリセットマッピング
サイトを分けると、カテゴリ・フォルダ・カテゴリセットもサイトごとに別物になります。たとえば日本語サイトの「お知らせ」(カテゴリ ID=10)と、英語サイトの「News」(カテゴリ ID=24)は、MT 上ではまったく別のオブジェクトです。
そのままでは、翻訳実行時に「翻訳元のカテゴリ ID=10 を翻訳先にコピーしようとしても、翻訳先には ID=10 のカテゴリが存在しない」という状態になり、関連付けがスキップされてしまいます。
v1.5.0 では、これらの ID 対応を専用モーダルで明示的に設定できるようになりました。翻訳設定画面で「カテゴリ/フォルダ マッピングを編集...」ボタンをクリックすると、次のモーダルが開きます。
「記事」「ウェブページ」「コンテンツデータ」の 3 タブを切り替えて、それぞれの対応を設定します。
操作は 3 つのボタンで完結します。
- 名前で一致: ラベル名が同じカテゴリを自動でペアにする
- AI で候補生成: LLM が候補から最適なペアを選ぶ(ラベル名が異なる場合に便利)
- 手動編集: ドロップダウンから選ぶ
コンテンツデータの場合は、カテゴリセットの組ごとに対照表が自動生成されます。たとえばコンテンツタイプの中で「お知らせカテゴリ」「製品カテゴリ」のように複数のカテゴリセットを使っている場合、それぞれの組に対して個別にマッピングを設定できます。
未マッピングのカテゴリがある記事を翻訳すると、そのカテゴリの紐付けはスキップされ、警告ログが残ります。記事本体の翻訳は実行されるため、後からマッピングを追加して再翻訳すれば、Placement だけが追加されます。
選択肢フィールド(セレクトボックス/ラジオボタン/チェックボックス)の値マッピング
選択肢系フィールドの値も、サイト間で異なるケースが一般的にあります。
| 翻訳元(select_box, ja) | 翻訳先(select_box, en) |
|---|---|
| 公開予定 | scheduled |
| 公開中 | published |
| 非公開 | private |
v1.4 まではこれらの値はそのままコピーされていたため、翻訳先サイトでバリデーションエラーになることがありました。v1.5.0 では、フィールドマッピングの各行に「値マッピング...」ボタンを追加し、値の対応表をモーダルで編集できるようにしています。
対象フィールドタイプは次のとおりです。
- セレクトボックス
- ラジオボタン
- チェックボックス
「値マッピング...」ボタンは、フィールドマッピングの左右両方が値マッピング対応タイプの場合にのみ表示されます。
モーダルの操作は他と共通で、「名前で一致」「AI で候補生成」「クリア」が利用できます。
マッピングに登録されていない値が翻訳元に含まれていた場合の挙動は、フィールドタイプによって変わります。
- 複数選択できるチェックボックスの場合: マッピング済みの値だけが翻訳先フィールドに書き込まれ、未マップの値は除外されます
- 1 つだけ選択するセレクトボックス/ラジオボタンの場合: そのフィールドの翻訳はスキップされ、翻訳先フィールドは更新されません(新規作成時は空のまま、再翻訳時は既存値がそのまま残ります)
いずれの場合もログに記録されるため、後からマッピングの漏れに気づいた際に追跡できます。
翻訳実行時の流れ(おさらい)
ここまでの 3 つの機能を組み合わせると、サイトをまたぐ翻訳でも次のように動作します。
- 翻訳元コンテンツの編集画面で「翻訳を作成」ボタンをクリック
- AITranslator が翻訳設定を読み込み、翻訳元と翻訳先のコンテンツタイプ・サイト・マッピングを解決
- テキスト系フィールドを LLM で翻訳
- 選択肢系フィールドを値マッピング経由で変換
- カテゴリ・フォルダをサイト間マッピング経由で対応する翻訳先 ID に変換
- 数値・URL・日付などの非翻訳フィールドをコピー対象フィールドマッピング(または自動マッチ)で引き継ぎ
- 翻訳先サイトにコンテンツが作成され、リダイレクト
ユーザーから見ると「翻訳ボタンを押したら、サイトをまたいで翻訳済みコンテンツが作成されていた」という体験になります。マッピングを適切に設定しておけば、それなりに大規模な多言語サイトでも安心して利用できます。
まとめ
v1.5.0 で、サイト間翻訳の運用に必要な 3 つのピースが揃いました。
- クロスコンテンツタイプ 翻訳の正式サポート(コピー対象フィールドマッピングと組み合わせて使用)
- カテゴリ/フォルダ/カテゴリセットマッピング(サイトをまたぐ ID 対応)
- 選択肢系フィールドの値マッピング(バリデーション制約のある値の対応)
これまで「翻訳先サイトを分けたいが、運用の手間が気がかりだ」と見送っていた方は、ぜひお試しください。
次回(第 5 回・最終回)は、長文や多言語一括翻訳が安定して動作するようになった点を取り上げます。分割翻訳パイプライン と LLM タイムアウトの環境変数化 の 2 本立てでお送りします。