AITranslator v1.4.0 リリース

公開日:

概要

v1.3.0 で導入したカスタムプロンプト機能を、独自オブジェクトとして再設計しました。プロンプトをシステム共通のライブラリとして登録・選択する形になり、複数のフィールドや設定で同じプロンプトを使い回せます。また、翻訳対象フィールドの拡充、AI 呼び出しタイムアウト延長、エラー表示の改善も含まれています。

新機能

AI 翻訳プロンプトの独自オブジェクト化

カスタムプロンプトを 独立した管理画面で一元管理 できるようになりました。

  • AI翻訳プロンプト一覧: システム管理画面のサイドメニューから「AI翻訳プロンプト」を開くと、登録済みプロンプトの一覧・新規作成・編集・削除ができます
  • 使い回し: 1 つのプロンプトを、複数の翻訳設定・複数のフィールドマッピングから参照できます。1 箇所修正すれば全ての参照先に反映されるため、運用負荷が下がります
  • 権限分離: 新規システム権限「AI翻訳プロンプトの管理」(manage_ai_translator_prompts) が追加されました。スーパーユーザーまたは本権限を持つユーザーのみがプロンプトを編集できます。サイト管理者は「選んで使う」だけが可能です

翻訳設定画面でのプロンプト選択

翻訳設定の編集画面で、長文 textarea ではなく select ドロップダウン からプロンプトを選択する形に変わりました。

  • デフォルトプロンプト: 設定全体に適用される共通プロンプトをセレクト
  • フィールド単位プロンプト: 各マッピング行で個別にセレクト
  • 未選択時は組み込みプロンプト(英語版)にフォールバック

翻訳対象フィールドの追加

これまで single_line_text / multi_line_text / tags のみが翻訳対象でしたが、以下を追加しました。

フィールド型

動作

embedded_text (埋め込みテキスト)

テキスト翻訳

plain_text (PlainTextField プラグイン提供)

テキスト翻訳

categories (カテゴリー)

同一カテゴリーセットを参照しているフィールド間でカテゴリー ID をコピー

カテゴリーは ID 参照のため翻訳されません。ソース/ターゲットフィールドが同じカテゴリーセットを参照している場合のみ、選択中のカテゴリーがコピーされます。

改善

AI 呼び出しタイムアウト延長

各プロバイダ (ChatGPT / Gemini / Claude) の HTTP クライアントのタイムアウトを 120 秒 → 300 秒 に延長しました。長文や複雑な HTML を含むコンテンツの翻訳で、応答待ちのタイムアウトが発生しにくくなります。

Web サーバ/リバースプロキシ側のタイムアウト(Apache ProxyTimeout / Nginx proxy_read_timeout 等)が短く設定されている環境では、引き続き 504 Gateway Timeout が発生する可能性があります。複雑なコンテンツを翻訳する場合は、サーバ側設定の見直しもご検討ください。

エラー表示の改善

JS 側で翻訳リクエストが失敗したときの alert メッセージに、HTTP ステータスコード を含めるようにしました。

既存翻訳の確認に失敗しました。 (HTTP 504 Gateway Timeout)
ライセンスが認証されていません… (HTTP 403 Forbidden)

サーバ側エラー (4xx) とインフラ側タイムアウト (5xx) を切り分けて把握できます。

内部リファクタリング

翻訳可能フィールドの判定を 3 箇所に散らばっていたインライン条件から、Translator.pm の定数 @TRANSLATABLE_TEXT_TYPES / @RELINKABLE_REFERENCE_TYPES 経由に統一しました。将来フィールド型を追加する際は 1 箇所の編集で済みます。

修正

「カスタムプロンプト保存後にフィールドマッピングが表示されない」現象

v1.3.0 で報告された、<img> や <!-- ... --> 等を含む長文プロンプトを保存するとフィールドマッピング UI が消える不具合を根治しました。原因は JSON::decode_json が MT::Object 由来の Perl 内部文字列 (UTF-8 flag 立ち) を扱えず「Wide character」エラーで silent fail していたことです。JSON::from_json (utf8=0 モード) に統一して解消しました。

v1.4.0 では本問題の発生経路自体(フィールドマッピング JSON へのプロンプト直接埋め込み)が無くなったため、再発の余地もありません。

その他

  • checkExisting の catch 句でエラー内容を握りつぶしていた箇所を修正し、サーバから返るエラーメッセージが正しく表示されるように
  • 翻訳設定の保存で default_prompt 文字列カラムへの上書き処理を撤去(プロンプトはオブジェクト参照に統一)

互換性

  • スキーマ拡張: translation_config に default_prompt_id (INT, NULL 可) を追加、新規テーブル mt_ai_trans_prompt を作成(schema_version 1.0006 → 1.0008)
  • 自動マイグレーション: 既存の default_prompt(テキストカラム)および field_mapping JSON 内の inline prompt フィールドは、初回起動時に自動的に AITranslator::Prompt オブジェクトとして抽出され、ID 参照に置換されます。同一内容のプロンプトは集約され、重複は作られません
  • 新システム権限: manage_ai_translator_prompts を権限編集画面で付与可能。administer 権限保持者には自動付与されます
  • 旧データの保護: 万一マイグレーションが失敗(JSON 構造異常など)した場合でも Translator.pm::_resolve_prompt がインラインプロンプトの読み出しをフォールバックします。翻訳動作は継続されます

アップグレード時の注意

  • 既存の default_prompt / inline prompt を含む翻訳設定がある環境では、アップグレード後に AI翻訳プロンプト一覧 をご確認ください。「Imported prompt」「Default prompt for [設定名]」といった名前で自動移行されています
  • 同じプロンプト本文を使っていた設定は 1 つの行に集約されます。名前は最初に検出された箇所のヒントが採用されます
  • プロンプト名はシステム全体で一意です。後から識別しやすい名前にリネームすることをお勧めします