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

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

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

コミュニティのコンテンツのローカリゼーション

Discourseでは、以下の場所で設定可能ないくつかのローカリゼーション機能にアクセスできます:

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

準備

まず、Data Explorerを使用してコミュニティに関する情報を収集することをお勧めします。

ユーザー設定によるロケール

以下のクエリを使用すると、/my/preferences/interfaceでロケールを設定しているユーザーの数を把握することができます。

SELECT locale, count(*) as count
FROM users
WHERE (locale IS NOT null AND locale <> '')
GROUP BY locale
ORDER BY count DESC
Data Explorerのサンプル結果

ユーザーの所在地

Browser pageview events enabled(サイト設定)が有効な場合、より良い解決策として、ユーザーがどの国から来ているかを示す以下のクエリを使用できます:

SELECT
  e.country_code AS country_code,
  COUNT(*) AS pageviews
FROM browser_pageview_events e
WHERE e.country_code IS NOT NULL
  AND e.country_code <> ''
GROUP BY e.country_code
ORDER BY pageviews DESC
サンプル結果

設定

上記の情報により、コミュニティがサポートすべきロケールについてより詳細な情報が得られました。

<your-site-url>/admin/site_settings/category/content_localizationで、設定を開始してください。

  • Content localization enabled - 元のユーザーコンテンツをローカライズされたコンテンツに置き換える機能をオンにします。自動(AI)および手動(人間)のローカリゼーションモードについては、後述します。
  • Content localization supported locales - サイトがサポートする言語のリスト
  • Content localization crawler param - 以下のクローラーのセクションで説明します
  • Content localization language switcher - 直下で説明します
サイト設定のロケールリスト 📸

言語スイッチャー

次の設定であるContent localization language switcherを有効にすると、サポートされているロケールのリストで選択した言語のリストを表示することで、ログインしていないユーザーにもコミュニティをよりアクセスしやすくすることができます:

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

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

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

多言語に対応したログイン済みの閲覧者は、複数の言語を理解していることを示すことができるため、それらの言語のコンテンツは翻訳されません。

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

Discourse AIはローカリゼーション機能にとって非常に重要であり、手動翻訳の必要性を解消します。

管理者として、Discourse AIの翻訳専用エリアにアクセスしてください。この専用エリアでは、以下をカバーします:

  • 翻訳の進捗状況
  • AI設定
  • アプリの言語設定

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

  • AI translation backfill hourly rate - この設定のデフォルト値は50です。サイトは、Content localization supported localesで設定したロケールに対して、1時間あたり50件の投稿、50件のトピック、50件のカテゴリ、50件のタグを翻訳します。開始時は低い数値に設定してください。
  • AI translation category scope - デフォルトはPublic categoriesです。すべてのカテゴリ、または特定の選択に変更できます。
  • AI translation personal messagesおよびAI translation include bot contentは、その名の通りです。
  • AI translation backfill start date - この値はデフォルトで空です。AI翻訳機能を「今日」に有効にすると、日付は自動的に「今日 - 5日」に設定されます。
  • AI translation post raw translator agent(および他のエージェント) - よりフォーマルなコミュニティでは、管理者は独自のエージェントを作成することを選択できます。これにより、好む言語や語彙に合わせて微調整されたプロンプトを設定できます。

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

手動ローカリゼーション

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

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

現在、投稿コンテンツ、トピックタイトル、カテゴリ名、カテゴリ説明、タグ名、タグ説明、およびサイドバーのローカリゼーションに対応しています。以下の各セクションで、それらがどのように機能するかを示します。

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

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

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

管理者として、通常どおりカテゴリ設定にアクセスし、左側に新しい「Localizations」ナビ項目を見つけることができます。

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

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

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

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

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

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

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

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

カスタムサイドバーのローカリゼーション

「すべての人に可见」なサイドバーセクションには、追加の翻訳コントロールも表示されます:

クローラー

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

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

追加の証明/検証のために

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

FAQ

設定しましたが、自動翻訳がまだ機能しません
以下の設定がされているか確認してください:

  • 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: です
  • 各翻訳エージェントに機能するLLMが設定されている必要があります

それでも解決しない場合は、SiteSetting.ai_translation_verbose_logsを有効にできます。

自動翻訳は保存されますか、それともトピックが閲覧されるたびにLLMに送信されますか?
翻訳は保存され、各投稿は言語ごとに1回だけ送信され、翻訳が再利用されます。

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

元の投稿が編集された場合、再翻訳されますか?
はい – 1日あたり最大2回。投稿が編集されると、5分以上またはSiteSetting.editing_grace_periodのいずれか長い方の遅延の後、再翻訳のために送信されます。Content localization allowed groupsの承認されたユーザーは、投稿をすぐに再翻訳に送信するオプションがあります。

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


「いいね!」 25
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
Übersetzung wie hier auf Meta
Anonymous user language selector for Discourse
Update or Replace Header Locale Selector for New Discourse Header (widgets-end-of-life) – Is Built-in Support Available?
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`?
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
Not sure how to juggle languages while setting up my francophone community
Structuring a multilingual community
Why is Discourse AI translation not working
How to set up Discourse AI for internal-only usage
AI translation of all PMs
Content localization language switcher doesn't work
This Meta Branded theme is special. Can I use it on my forum too?
Feature Request: Translation of FAQ/Terms of Service/Privacy
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を永続的に実行し続けると決断しない限り、機能しないでしょう。