翻訳しないフィールドも翻訳先へコピー(連載 2/5)コピー対象フィールドマッピング

2026-05-29
8分で読了
更新: 2026-05-29
AITranslatorBanner.webp

目次

AITranslator v1.5.0 の連載第 2 回です。今回は v1.5.0 で特にご要望の多かった「翻訳しないフィールドの値も翻訳先にコピーしたい」というニーズに応える機能、コピー対象フィールドマッピング をご紹介します。

これまでの課題

たとえば、次のようなコンテンツタイプを翻訳していたとします。

  • タイトル(text)
  • 本文(textarea)
  • イベント開催日(date)
  • 価格(number)
  • 詳細ページ URL(url)
  • カテゴリ

このうち、AITranslator が翻訳するのは「タイトル」と「本文」です。残りの「開催日」「価格」「URL」は翻訳対象ではないため、LLM には送られません。

ここで課題になるのが、翻訳先のコンテンツタイプが翻訳元と異なる場合(たとえば「Site Page」と「Site Page (de)」のように、似ているものの別物のコンテンツタイプ)です。これら非翻訳フィールドの値が翻訳先で空のままになってしまうケースがありました。コンテンツタイプ間でフィールドの ID が異なるため、AITranslator が「どのフィールドにコピーすればよいか」を判断できなかったのです。

実運用でも「翻訳先で日付が入っていない」「URL が空になっている」といった状況がたびたび発生し、そのたびに翻訳結果を 1 つずつ手作業で埋め直していました。地道で負担の大きい作業でした。

v1.5.0 では、この問題を新しい設定セクションでまとめて解決しています。

「コピー対象フィールドマッピング」とは

翻訳設定の編集画面に、「翻訳対象フィールドマッピング」とは別に 「コピー対象フィールドマッピング(翻訳しない)」 というセクションを追加しました。

ここでは、翻訳元のフィールドと翻訳先のフィールドのペアを設定します。翻訳実行時、AITranslator は指定されたフィールドの値を翻訳元から翻訳先へ そのままコピー します。LLM は呼ばれないため、トークンも消費しません。

対象になるフィールドタイプは次のとおりです。

  • 数値(number / integer / float
  • URL(url
  • 日付と時刻(date_and_time / datetime
  • 日付のみ(date_only / date
  • 時刻のみ(time_only / time
  • 真偽値(boolean / checkbox
  • 選択肢系(select_box / radio_button / checkboxes の値マッピング無し)
  • テキスト系(翻訳せずに引き継ぎたい場合)

セクションは「記事カスタムフィールド」「ウェブページカスタムフィールド」「コンテンツフィールド」の 3 種類に分かれており、それぞれ独立して設定できます。

操作用のボタン

各セクションには次のボタンが並んでいます。

  • マッピングを追加: 空の行を 1 つ追加します
  • 名前で一致: 翻訳元と翻訳先で同じラベル名のフィールドを自動でペアにします
  • AI で候補生成: LLM が翻訳先候補から最適なペアを選びます(ラベル名が異なる場合に便利です)
  • クリア: 設定済みのマッピングをすべて削除します

「名前で一致」は空白除去・大文字小文字無視で比較するため、「URL」と「url」のような表記の揺れも吸収します。

「AI で候補生成」は連載第 3 回で詳しく取り上げますが、概要だけお伝えすると「翻訳先のラベル名が翻訳元と大きく異なる場合でも、意味的に近いペアを LLM が選ぶ」という機能です。

設定しなくても動作するフォールバック

コピー対象フィールドマッピングは、空のままにしておいても動作します

翻訳実行時、ユーザーが明示的にマッピングを設定していない場合は、AITranslator が自動でラベル名(コンテンツフィールド)または basename(カスタムフィールド)から対応するフィールドを探し、コピーします。

つまり、翻訳元と翻訳先で同じラベル名・basename を使っていれば、何も設定しなくてもコピーされます。明示的なマッピングが必要になるのは、ラベル名が異なる場合だけです。

このフォールバックがあるため、既存のサイトを v1.5.0 にアップグレードしても、設定の入れ直しは必要ありません。アップグレードするだけで、数値や URL も自動的にコピーされるようになります。

アセット・カテゴリ・タグはコピー対象から除外しています

選択肢には表示していませんが、画像・音声・動画・ファイルといったアセット系、それからカテゴリーフィールド、タグはコピー対象から意図的に除外しています。

理由は、これらをそのままコピーすると別ブログでは ID が成立しなくなるためです。たとえばアセットの ID はブログごとに割り振られているため、blog 45 の asset id=123 を blog 46 にコピーしても、そのアセットは存在せず、リンク切れになってしまいます。

これらは翻訳対象フィールドマッピング側で扱うべきもので、AITranslator は内部的に AssetCopierカテゴリマッピング という別の仕組みを用いて、別ブログでも有効な ID に変換します。

そのため、コピー対象フィールドマッピングには「値をそのままコピーしても問題ないもの」だけが表示されます。

実際の翻訳結果

設定して翻訳を実行すると、翻訳先のコンテンツは次のようになります。

数値「42」、URL「https://example.com/ja」、日付と時刻「2026-05-20 10:30:00」、日付「2026-12-31」、時刻「23:45:00」が、そのまま翻訳先にコピーされています。テキスト系のフィールドはドイツ語に翻訳されているため、両者が共存していることが分かります。

タイトルとデータ識別ラベルもドイツ語になっています。「Roy's Kopiertest」「Titel: Kopiertest」「Der erste Absatz des Haupttextes」あたりが翻訳結果です。

URL や日付の値を翻訳時に書き換えたい場合

URL のパスを「/ja/」から「/en/」に置き換えたい、といったご要望もあるかもしれません。コピー対象フィールドマッピングは値をそのままコピーするシンプルな実装のため、現状こうした置換はサポートしていません。

代替として、URL を翻訳対象に含め、AI 翻訳プロンプトに置換ルールを記述する方法があります(v1.4.0 で導入したカスタムプロンプト機能を使います)。たとえば次のようなプロンプトを設定しておけば、LLM が URL のパスを書き換えます。

You are a URL rewriter. The input is a URL. Replace the language path
segment `/ja/` with `/en/`. Keep the rest as-is. Output only the URL.

{text}

ただし、URL のような構造化された値を LLM に渡す方法はどうしても不確実性が残ります。置換ルールが固定であれば、MT のテンプレートタグで処理する方が確実かもしれません。

まとめ

v1.5.0 のコピー対象フィールドマッピングは、これまで課題だった「翻訳先で数値や URL が空になってしまう問題」を解決します。

ポイントは 3 つです。

  1. 翻訳しないフィールド(数値・URL・日付・時刻・選択肢系など)を翻訳先へそのままコピーできる
  2. ユーザーが明示的に設定しなくても、ラベル名・basename での自動マッチがフォールバックとして動作する
  3. アセット・カテゴリ・タグはコピー対象から除外(cross-blog で ID が成立しないため、翻訳対象側の仕組みで処理)

実運用では「同じコンテンツタイプ の場合」「異なるコンテンツタイプ の場合」のどちらでも自然に動作します。

次回(第 3 回)は、各マッピング UI に追加した「AI で候補生成」を取り上げます。LLM が翻訳元と翻訳先のフィールドを意味的にペアリングする機能のご紹介です。

この記事をシェア

関連記事