問題
Discourse のコンテンツローカライズ(手動および Discourse AI による自動処理)は、トピックタイトル、投稿、カテゴリ名、カテゴリ説明のローカライズを非常にうまく処理しています。しかし、カテゴリのトピックテンプレート(categories.topic_template)はローカライズできません。多言語コミュニティでは、コンポーザーのプリフィル(事前入力)は常にサイトのデフォルト言語で表示されます — 全員に対してです。
現在の動作
CategoryLocalization は、ロケールごとに name と description を保存します(Localizable concern は Topic/Post/Category に対して「マルチロケール対応の名前/説明サポート」を提供します)。
- コンポーザーは、メンバーのインターフェースロケールに関係なく、常にローカライズされていない
topic_template を使用します。
提案される解決策
CategoryLocalization に topic_template を追加します(管理用のローカライズ編集 UI を含む)。
- メンバーがカテゴリ内でコンポーザーを開いた場合、そのインターフェースロケールに一致するテンプレートを使用し、ローカライズが存在しない場合はカテゴリのデフォルトテンプレートにフォールバックします。
- 同じギャップは、新しいカテゴリごとのフォームテンプレートにも当てはまります:それらはカテゴリ間で異なることができますが、1 つのカテゴリ内でロケール対応のバリアントは存在しません — 多言語環境では、これを回避するためにコミュニティを言語別カテゴリに分割する必要があります。
ユースケース
私たちはバイリンガルコミュニティを運営しています(デフォルトはドイツ語、英語は自動 AI 翻訳)。一部のカテゴリは、チェックリスト項目と組み込みの日付ピッカー用の [event] ブロックを含む、構造化されたコンポーザーテンプレートを提供しています。英語圏のメンバーは現在、ドイツ語だけのテンプレートを受け取っています。私たちの回避策は、バイリンガルのテンプレート 1 つです(各ラベルが 1 行に「ドイツ語 / 英語」として重複表示されます)。これは機能しますが、編集者とメンバーの両方にとって使い勝手が悪く、コンポーザーの内容が倍になります。
関連
- #32464(ローカライズされたカテゴリルート) — 同じローカライズ対象、カテゴリ。
「いいね!」 3
元の依頼について、具体的な実装のスケッチを追記します。方向性が妥当であれば、PRの作成にも協力できます。
問題点: カテゴリのトピックテンプレート(categories.topic_template)はローカライズできません。CategoryLocalization モデルと Localizable concern は name と description しかカバーしておらず、AI コンテンツローカライゼーションのパイプラインもテンプレートを無視しています。そのため、コンポーザーはユーザーのロケールに関係なく、常にベースロケールのテンプレートが挿入されます。
ユースケース: 本番環境で Discourse AI コンテンツローカライゼーション(自動翻訳機能付き)を使用したバイリンガル(DE/EN)コミュニティを運営しています。投稿やトピックの翻訳はうまく機能していますが、構造化コンテンツ用のカテゴリテンプレート(チェックリスト付きのバグレポートフォーム、[event] BBCode を使った RSVP フローなど)は、機能的な BBCode が正確に1回だけ存在しなければならないため、言語ごとに複製できません。唯一の回避策は、読みづらいバイリンガルのラベル(例: “App-Version / App version:”)を含む単一のテンプレートを使用することですが、これはすべてのユーザーにとって読みやすさを損ないます。
提案:
category_localizations テーブルに NULL 可能な topic_template テキストカラムを追加する
- コンポーザー: ユーザーの現在のロケールに対応するローカライズが存在する場合、そのテンプレートを使用し、なければ
category.topic_template にフォールバックする
- カテゴリ管理 UI で、ローカライズされた名前や説明の隣に、ロケールごとにフィールドを公開/永続化する
- カテゴリを翻訳する際、AI コンテンツローカライゼーションのパイプラインに
topic_template を含める(description と同様に)
マイグレーションは自明です(add_column :category_localizations, :topic_template, :text)。主な作業はコンポーザーの選択ロジックと管理 UI です。
検討した代替案:
- バイリンガルの単一テンプレート(現在の回避策)— 機能的な BBCode ブロックがあると機能しなくなる
- ロケールごとにテキストを注入するテーマコンポーネント — 脆弱で、サーバーサイドの検証がなく、API コンポーザーが壊れる