コンテンツローカライゼーション - Discourse AI を使った手動と自動

このトピックでは、コンテンツローカリゼーション機能と、それらを有効にする方法について詳しく説明します。機能は以下の 2 つの部分に分かれています:Discourse にデフォルトで用意されている機能と、自動翻訳のための Discourse AI です。

:warning: 関連セクションに素早くアクセスするには、wiki の見出しを使用してください :backhand_index_pointing_right:t2:

コミュニティのコンテンツをローカライズする

更新されたバージョンの Discourse(3.5.0.beta7-dev)では、以下の場所で設定可能な複数のローカリゼーション機能を利用できます:

  • <your-site-url>/admin/site_settings/category/content_localization
サイト設定での新しいコンテンツローカリゼーション 📸

ユーザー情報の取得

まず、コミュニティの状況について情報を収集することが重要です。以下のデータエクスプローラークエリを使用すると、/my/preferences/interface でロケールを設定したユーザー数がどれくらいか把握できます。

SELECT locale, count(*) as count
FROM users
WHERE (locale IS NOT null AND locale <> '')
GROUP BY locale
ORDER BY count DESC
データエクスプローラーのサンプル結果

コミュニティがサポートするロケールの設定

上記の情報を基に、コミュニティがどのロケールをサポートすべきかについてより明確な判断が可能になります。

<your-site-url>/admin/site_settings/category/content_localization で、サポートするロケールを選択できます。

  • Content localization enabled - ユーザーが作成した元のコンテンツをローカライズされたコンテンツに置き換える機能を有効にします。自動モードと手動モードの詳細については以下をお読みください。
  • Content localization supported locales - サイトがサポートする言語のリスト
  • Content localization crawler param - 後述のクローラーセクションで説明します
  • Content localization language switcher - 直後に説明します
サイト設定のロケールリスト 📸

続く設定 Content localization language switcher を有効にすると、サポートするロケールの一覧に選択した言語を表示することで、ログインしていないユーザーにもコミュニティへのアクセスを容易にできます:

ページ右上の言語スイッチャー

ローカライズされたコンテンツの表示


meta.discourse.org 上のローカライズされたウェルカムトピック

ローカライズされたコンテンツを閲覧するユーザー(すべてのサイト訪問者)は、投稿の日の隣にあるインジケーターにカーソルを合わせると、投稿の元の言語を確認できます。このインジケーターは、投稿がユーザーの言語でない場合のみ表示されます。

ユーザーが元のコンテンツのみを表示したい場合は、トピックのタイムラインの上にあるトグルを使用して、サイト全体のローカライゼーションを無効にできます。

Discourse AI による自動翻訳 :sparkles:

Discourse AI はローカリゼーション機能に不可欠なビタミンのようなもので、手動翻訳の必要性をなくします。

管理者として、新しい AI 機能セクションの 翻訳 に移動してください。

管理者設定の Discourse AI 機能 📸

/admin/plugins/discourse-ai/ai-features で下にスクロール

重要な設定と推奨事項について説明します:

  • AI translation backfill hourly rate - この設定のデフォルト値は 50 です。レートが 50 の場合、サイトは設定した Content localization supported locales のロケールに対して、1 時間に 50 件の投稿、50 件のトピック、50 件のカテゴリを翻訳します。開始時はこの値を低く抑えてください。
  • AI translation target categories - デフォルトではカテゴリが選択されていません。選択されたカテゴリ内のコンテンツのみが翻訳されます。サブカテゴリは別途追加する必要があります。カテゴリ内のトピックの翻訳を無効にする場合は空のままにしてください。
  • AI translation personal messages - デフォルトは none です。どの個人メッセージを翻訳するかを制御します。none は PM の翻訳を無効にします。group はグループ PM のみを翻訳します。all はすべての PM を翻訳します。
  • AI translation include bot content - デフォルトは false です。有効にすると、ボットユーザー(ユーザー ID < 0)からの投稿も翻訳されます。デフォルトでは、ボットのコンテンツは翻訳対象から除外されています。
  • AI translation max post length - デフォルトは 10000 です。これはセーフガードであり、特定の長さを超える投稿の翻訳を防ぎます。
  • AI translation backfill max age days - デフォルトは 5 です。つまり、5 日以上前のトピックや投稿は翻訳されません。すべてのトピックや投稿を翻訳するには、この値を大きく設定してください。
  • AI translation post raw translator agent(および他のエージェント)- よりフォーマルなコミュニティでは、管理者が独自のエージェントを作成することを選ぶ場合があります。これにより、好みの言語や語彙に合わせたプロンプトを設定できます。

適切なエージェントの構成方法や、各機能に合わせたプロンプトの微調整については、AI bot - Agents を参照してください。

翻訳の進捗状況

自動翻訳の進捗状況については、/admin/plugins/discourse-ai/ai-translations の「翻訳の進捗状況」チャートで確認できます。

このチャートが表示される条件は以下の通りです:

  • すべての翻訳エージェントに有効な LLM が設定されている
  • discourse ai enabled :check_mark:
  • ai translation enabled :check_mark:
  • content localization supported locales が設定されている
  • ai translation backfill max age days が 0 より大きい
  • ai translation backfill hourly rate が 0 より大きい

手動ローカリゼーション

ローカリゼーションは Discourse のコア機能であるため、Discourse AI を使用した自動翻訳が利用できない場合でも、手動でローカリゼーションを入力・編集する機能を提供しています。

デフォルトでは、管理者とモデレーターがローカリゼーションの編集を行えるように設定されています。

サイト設定でのローカリゼーションを許可するグループ 📸


コンテンツローカリゼーションの管理者サイト設定

現在、投稿コンテンツ、トピックタイトル、カテゴリ名、カテゴリ説明、タグのローカリゼーションが可能です。以下のセクションでそれらの仕組みについて説明します。

カテゴリのローカリゼーション

ローカライズされたカテゴリは、カテゴリ名と説明の両方がローカライズされた以下の場所で表示されます:

カテゴリがローカライズされる場所 📸
  1. ホームページ、サイドバー、カテゴリドロップダウン
  1. カテゴリページ
  1. サブカテゴリを持つ特定のカテゴリ

管理者として、通常通りカテゴリ設定にアクセスし、左側の新しい「ローカリゼーション」ナビゲーション項目を見つけることができます。

カテゴリ設定でのカテゴリローカリゼーションの編集 📸

トピックと投稿のローカリゼーション

上記の カテゴリのローカリゼーション のスクリーンショットから、トピックタイトルと抜粋がローカライズされていることに気づいたかもしれません。

いくつかの前提条件があります:

  • ユーザーが content localization allowed groups に含まれていることを確認してください
  • Content localization enabled が有効になっている場合、post menupost menu hidden items に自動的に addTranslation ボタンが追加されます。これにより、content localization allowed groups に含まれるユーザーに対して投稿メニューに :globe_with_meridians: が表示されます。
  • Content localization allow author localization はデフォルトで有効になっており、投稿者は上記と同じ投稿メニューを使用して自身のコンテンツをローカライズできます。
3 つのサイト設定 📸


:backhand_index_pointing_down:t2:

再び申し上げますが、ローカライズ可能な言語のリストは上記の Content localization supported locales 設定にあります。

ローカライズされた投稿の編集

ユーザーがローカライズされた投稿を表示している場合、投稿を編集しようとすると、どのバージョンを編集するかを尋ねるダイアログが表示されます:

決定後、適切なコンポーザーが表示されます。

特定のロケールの投稿翻訳の削除

上記の post menu 設定に関する手順を正しく実行した場合、Content localization allowed groups に含まれている限り、以下の操作が可能です:

クローラー

Content localization supported locales で設定したさまざまな言語でサイトを表示するよう、クローラーに許可できます。このサイト設定は「コンテンツローカリゼーション」セクションの Content localization crawler param にあります:

その結果、クローラーは以下の内容を確認できます。各サポート言語には、トピックの head に対応する hreflang が含まれます:

追加の証拠/検証

この機能を徹底的にテストし、X 数のサポート言語を導入した後、適切にインデックス付けされていることを確認しました。

よくある質問

設定は完了したが、自動翻訳がまだ機能しない
以下の設定を確認してください:

  • Content localization supported locales に少なくとも 1 つの言語が設定されている
  • Content localization enabled:check_mark: である
    • Allow user locale:check_mark: である(デフォルトで有効)
    • Set locale from cookie:check_mark: である
  • Ai translation enabled:check_mark: である
  • Ai translation backfill max age days が 0 でない
  • Ai translation backfill hourly rate が 12 より大きい
  • 各翻訳エージェントに動作する LLM が設定されている必要がある

それでも解決しない場合は、SiteSetting.ai_translation_verbose_logs を有効にしてください。

すべての投稿が翻訳されていますか?
AI translation backfill limit to public content:check_mark: の場合、公開カテゴリのすべての投稿が翻訳されます。デフォルトでは、AI translation include bot content が有効でない限り、ボットの投稿(ユーザー ID < 0)は除外されます。

自動翻訳は保存されますか、それともトピックを見るたびに LLM に送信されますか?
翻訳は保存されます。各投稿は言語あたり 1 回のみ LLM に送信され、翻訳結果は再利用されます。

私のフォーラムが英語と日本語(Content localization supported locales を介して)をサポートしている場合、誰かがスペイン語で投稿した場合、その投稿は翻訳されますか?
はい。書かれている言語に関係なく、すべてのトピックと投稿が英語と日本語に翻訳されます。

元の投稿が編集された場合、再翻訳されますか?
はい。1 日最大 2 回まで再翻訳されます。投稿が編集されると、5 分または SiteSetting.editing_grace_period のいずれか長い時間遅延した後、再翻訳が送信されます(忍者編集への対応のため)。Content localization allowed groups に含まれる権限ユーザーは、投稿を即座に再翻訳するオプションを持っています。

エージェントや LLM を変更すると、翻訳は削除されますか?
いいえ。明示的に投稿メニュー項目または翻訳コンポーザーを使用して削除しない限り、翻訳は設定変更後も通常維持されます。


「いいね!」 24
Content Localization and Automatic Translations for Your Community
I can't find discourse AI as a provider in the discourse translator plugin
2 language site
Machine-translate messages so users can read without knowing sender's language
Update or Replace Header Locale Selector for New Discourse Header (widgets-end-of-life) – Is Built-in Support Available?
Anonymous user language selector for Discourse
Übersetzung wie hier auf Meta
Translate Discourse automatically (without a button)
Help which plugin is in the screenshot
About auto translation
Auto Country Translation
How to Add Automatic Multilingual Translation Interface in Discourse?
3.6.0.beta2: Built-in palette editing, live AI translation progress, and better wiki tracking
The usage problem after using AI translation
AI translation backfill not working after all settings configured
AI translation backfill not working after all settings configured
Single post/header only partially translated -issue
Language Switcher Problem, Not Translating Posts
配置好 ai 翻译后,帖子已经被自动翻译,但是在帖子顶部和右侧没有显示语言切换按钮
Feature Request: Allow Users to Localize Only Their Own Topics
How to configure ai translate of `Ai translation backfill hourly rate`?
AI translation of all PMs
Seeking experience: Supporting a multilingual Discourse community
Ongoing translation in threads
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
Quick replies for Discourse Chat notifications
Not sure how to juggle languages while setting up my francophone community
Structuring a multilingual community
How to set up Discourse AI for internal-only usage
Single post/header only partially translated -issue
Header Locale Selector
为啥的布署的discourse不支持修改语言
Topic list is shown in a language (DE) but has one (DE) topic not translated
If topic info is too long, tags are cut off and create a blank line
Content Localization and Automatic Translations for Your Community
Images break when the page is auto-translated by a browser translation extension (S3/R2 + CDN is configured correctly)
Bearbeitung von Übersetzen Beiträgen verbessern
Why Is the Discourse AI Translation Icon Not Appearing?
Why are posts in Swedish un-translated to Finnish, default locale?
Discourse AI Translator, Planet Icon Missing
Language switcher and language content
Multilingual user feedback on Automatic Translations
Sharing approaches to using automation to send messages to members

既存のカテゴリに対して一括でこれを行うための推奨事項はありますか?最悪の場合、API経由で可能でしょうか?

「いいね!」 2

うーん、良い質問ですね。カテゴリ更新エンドポイントのAPIドキュメントが更新されるようにします。:memo:

「いいね!」 4

言語ごとのモデレーターのサポートはありますか?メタについて考えています。そこでは特定の言語の投稿をチェックし、手動で更新するボランティアをするかもしれません。特に、人間的なタッチを歓迎する可能性のあるドキュメントについてです。しかし、あなたは「モデレーターのみが実行できます」と言っていますが、私はおそらくモデレーターにはなれません。

「いいね!」 3

うーん、良い提案ですね。それは可能だと思いますが、どのように設定するか詳細を考える必要があります。

「いいね!」 3

アクセスするにはどうすればよいですか?コマンドを提供していただけますか?

Sidekiq にリンクされたジョブはありますか?手動でトリガーすることは可能ですか?

「いいね!」 1
「いいね!」 2

Moinさんの上記の投稿に付け加えると、コンソールにアクセスしたら、SiteSetting. ai_translation_backfill_hourly_rate だけで済みます。ジョブは5分ごとに実行され、それに応じてレート制限がかかります。

「いいね!」 3

ドキュメントでローカライズが利用可能になったのですね。@natさん、ありがとうございます!

「いいね!」 3

素晴らしいですね、チームの皆さん、おめでとうございます!今すぐテストして、私の考えや全体的な経験を共有します。

Esperantoがリストにありません。これは「単純に」追加できますか、それともまずdiscourse-languagesに組み込む必要がありますか?

すごい、よく気が付きましたね。まさに報告しようとしていたところです。:laughing:

はい、その通りです。コントロール(ボタン、ラベルなど)が Crowdin (Translations - Discourse Meta を参照) を介して適切かつ十分に(70% あれば非常に良い)翻訳された、完全なローカライズされたエクスペリエンスを提供したいと考えており、それによってその言語のサポートを提供できます。

「いいね!」 2

ドキュメントカテゴリでコンテンツのローカライズは機能しますか?インデックストピックをローカライズしても、サイドバーのコンテンツが翻訳されていないようです。

また、奇妙な動作にも気づきました。ローカライズされたトピックを元の言語で表示し、更新すると、ローカライズされたバージョンに切り替わります。元のバージョンに手動で再度切り替える必要があります。

「いいね!」 3

素晴らしい発見ですね。まだ動作していませんが、@nat が追跡してくれるはずです!

これがサイドバーのドキュメントリンクのための、より良い抽象化/データモデルを考案するきっかけになるかどうか、気になります。

「いいね!」 2

はい、その通りです。Discourseには明示的な翻訳が必要な場所がたくさんあるため、見つけ次第記録しています。最近では、トピックタイトルの通知もローカライズしました。これは私が作成した機能トピックの例です - https://meta.discourse.org/t/show-translated-user-bios/378908。

新しいトピックを作成し、@メンションしますので、サイドバーのすべての項目を確実に網羅できるようにします。

編集:@tvavrda はここでカバーされています - https://meta.discourse.org/t/translate-sidebar-documentation-links/379540。確認して、意味が通じるか見てください。

「再度切り替える」とはどういう意味ですか?

次回発生した際には、動画(アドレスバーを含めて)を共有していただけますか? :folded_hands:t2: このケースの内容が公開に適さない場合は、お気軽にDMでご連絡ください。また、ログインしていましたか? 技術的には、これらはクッキーによって追跡されるため、私にとっては少し不可解です。

「いいね!」 1

ビデオを送りました。

もう一つの観察事項ですが、翻訳されたコンテンツの差分を確認することはできませんよね?もしコンテンツが更新された場合、それは役立つかもしれません。それほど重要ではありませんが、理にかなっていると思います。

さらに、トピックの下にあるバックリンクには、ローカライズされたトピック名が表示されません。

そして質問ですが、カテゴリ設定でカテゴリの説明をローカライズする意味は何でしょうか?カテゴリの説明は、「About」トピックのローカライズされたバージョンから取得されるべきではないでしょうか?ローカライズされたバージョンはMarkdownをサポートしていないため、リンクを使用できませんが、私はリンクを使用したいのです。

「いいね!」 1

古い GitHub - discourse/discourse-docs-sidebar コンポーネントは、実際にはローカライゼーションを尊重しています :slight_smile: 一時的にそちらに切り替えました。

はい、これも現在サポートされておらず、かなりの労力が必要です。

投稿の編集インジケーターに似た、特別な色のインジケーターがあり、投稿バージョンが変更されたため翻訳が古い可能性がある場合に表示されます。

「いいね!」 1

ピン留めされたトピックの概要にも翻訳されていないコンテンツが表示されます。トピックリストは翻訳された言語で表示されますが、ピン留めされたトピックの概要には元の言語が表示されます。

「いいね!」 1

手動で翻訳を行ったり修正したりすることはできますが、翻訳のビルドを手動でトリガーすることはできますか?オンデマンドジョブのようなものです。

考えているのは、1年前のトピックの翻訳を許可したということです。しかし、その1年は現在の日付からカウントされる場合、その制限はすでに翻訳されたコンテンツに向かって常に移動します。しかし、最大の需要は、より速く、かなり遅い一括処理なしで到達したい古い価値のあるコンテンツです。

翻訳を有効にした後のコストに関する情報をお持ちの方はいらっしゃいますか?当社のサイトはしばらく前から存在しており、可能であればサイト全体を翻訳したいと考えていますが、コストは間違いなく懸念事項です。そのため、経験から、例えば1000件の投稿で1ドルのような、おおよそのコストの目安があれば、概算コストを把握するのに大いに役立ちます。

コンテンツのローカライズは一度行われ、どこかに保存されるのでしょうか?つまり、オンデマンドではないのでしょうか?もしそうなら、私のデスクトップでOllamaとLlama 3やDeepseek 3のようなオープンソースLLMを起動して、完了するまでジョブを実行させることを妨げるものはありますか?

編集:初期翻訳コストを下げることは可能かもしれませんが、新しい投稿に対しては、ローカルLLMを永続的に実行し続けると決断しない限り、機能しないでしょう。