バッジとグループをローカライズ(多言語化)するにはどうすればよいですか?

バッジとグループをローカライズ(多言語化)するにはどうすればよいですか?セットアップ中に、バッジとグループのタイトルがテーマの言語に切り替わらないことに気づきました。バッジとグループをテーマの切り替えに従わせるにはどうすればよいですか?

多言語サイト向けにカスタムバッジやグループをローカライズする機能はまだありません。現時点では、投稿、カテゴリ、タグのみをローカライズできます。

了解しました、ありがとうございます。しかし、このウェブサイト(meta.discourse.org)のバッジがテーマと同時に言語を切り替えるのはなぜですか?これは翻訳機能によるものですか?公式チームに、バッジ、グループ、タグの多言語カスタマイズ設定を追加することを提案します。そうしないと、多言語ユーザーはバッジ、グループ、タグの内容を理解できません。

すべてのサイトには、Crowdin 経由で国際化 (i18n) されているシードバッジがいくつかあります。

カスタムバッジは、名前と説明をデータベースにプレーンテキストとして保存します。I18n.t (国際化機能) が badges.my_custom_badge.name のようなキーで呼び出された場合、一致する翻訳がないため、保存されているデータベースの値にフォールバックします。これにより、すべてのロケールで同じテキストが表示されます。

管理者がカスタムバッジキーの翻訳をロケールごとに手動で追加できる回避策があります。

サイトのテキストは、<your site>/admin/customize/site_texts でカスタマイズできます。


具体的な手順

  1. バッジを作成する
  • /admin/badges → 新しいバッジ に移動します。
  • 通常どおり、名前、説明、アイコンなどを設定します。
  1. i18n キーを見つける
  • キーのパターンは badges.{snake_case_name}.name です。
  • snake_case_name は、バッジ名を小文字にし、スペースをアンダースコアに置き換えたものです。
  • 例:「Pokémon Master」 → badges.pokémon_master.name
  1. 翻訳の上書きを追加する
  • /admin/customize/site_texts に移動します。
  • badges.pokémon_master を検索します。
  • 次のようなキーが表示されます。
    • badges.pokémon_master.name
    • badges.pokémon_master.description
    • badges.pokémon_master.long_description
  • 対象のロケール (例: 简体中文) に切り替え、キーをクリックして翻訳されたテキストを入力します。
  1. ロケールごとに繰り返す
  • ドロップダウンでロケールを切り替え、必要な各言語の翻訳を追加します。
    • .name - バッジのタイトル
    • .description - バッジカードに表示される短い説明
    • .long_description - バッジの詳細ページに表示される完全な説明

english

japanese

こんにちは!ご返信ありがとうございます!2番目の手順である「i18n key」の検索はどのように実現されているのでしょうか、i18n keyの場所が見つかりませんでした。

「見つける」というよりは、バッジに付ける名前から導き出すだけです(2番目のステップを「見つける」から「導き出す」に変更します)。

したがって、バッジ名に「Bug Finder」を使用する場合、キーは badges.bug_finder.name になります。

何らかの理由で、/admin/customize/site_textsで何を検索しても「No matching site texts found」と表示されます。原因をご存知でしょうか?

おっと、申し訳ありません。前の手順を修正する必要があります!
サイトテキスト管理ページ(/admin/customize/site_texts)では、Discourse の翻訳ファイルに既に存在するキーしか見つけることができません。したがって、badges.pokémon_master.name のようなカスタムバッジのキーはそこには存在せず、それらを検索しても何も返されません(これが現在発生している問題です)。

私が共有したスクリーンショットは、Railsコンソール経由で翻訳エントリを作成したセットアップからのものです。私が提供した管理UIの手順は、書かれた通りには機能しません。混乱させて申し訳ありません。コンソールアクセスがある場合に実際に機能する方法は、カスタムバッジの翻訳オーバーライドを作成することです。

# キーのパターンは次のとおりです: badges.{name_in_snake_case}.{name|description|long_description}
# 例:「Pokemon Master」というバッジの場合:
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.name", "宝可梦大师")
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.description", "あなたの説明")

コンソール経由で作成されると、翻訳は /admin/customize/site_texts に表示され、それ以降はそこから編集できるようになります。

コンソールアクセスがない場合、これは現在不可能です。@awesomerobot が言及したように、カスタムバッジのローカライズはまだサポートされていません。

この問題は、小さなプラグイン(https://github.com/canbekcan/discourse-localized-badges)で解決しました。GitHub で独自のリポジトリを作成し、言語ファイルを変更することも可能です。マイグレーションは不要ですが、必要に応じて db フォルダを確認するか、db フォルダを削除してください。

このプラグインは、すべての言語情報を configlocales に追加する形で動作します。いくつかのファイルが存在するため、独自の言語ファイルを作成することもできます。翻訳が完了したら、リポジトリを app.yml に追加し(Docker を使用している場合)、その後 rebuild してください。上記の @nat が述べている通り、新しいバッジの名前は badges.your_badge.name のように命名してください。これにより、言語ファイルで定義した通常の名称が自動的に表示されます。現在の言語ファイルを更新する場合は、アプリを rebuild する代わりに、管理パネルから更新することも可能です。

ファイルの構造を確認し、locales フォルダに独自の言語ファイルを作成することもできますが、ファイルは スペース に非常に敏感です :slight_smile:

注意: これはバッジの言語に関する問題に対する私の解決策です。より良い方法があれば、ぜひ聞かせてください :slight_smile: