通常、Discourse に新しい言語を追加する最良の方法は、「https://meta.discourse.org/t/how-to-add-a-new-language/14970」に記載されているように、プルリクエストを作成することです。
現在のところコアに追加できない言語を使用したい場合は、次のガイドを参照してください。
既存のロケールを拡張するロケールの追加
たとえば、メキシコ向けのスペイン語ロケール (es_MX) を追加したいとします。Discourse にはすでにスペイン語ロケール (es) が含まれているため、これは非常に簡単です。
プラグインのディレクトリ構造は次のようになります。
custom-locales
├── assets
│ └── locales
│ └── es_MX.js.erb
├── config
│ └── locales
│ ├── client.es_MX.yml
│ └── server.es_MX.yml
└── plugin.rb
plugin.rb
register_locale を呼び出して、新しいロケールを追加します。
-
最初のパラメーターは必須で、言語コードである必要があります。
-
name(ロケールの英語名) とnativeName(ユーザーインターフェースに表示される名前) は、言語コードがnames.ymlに存在する場合、省略できます。 -
fallbackLocaleは、翻訳の欠落や複数形ルールのフォールバックとして使用される言語コードです。
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
.js.erb
assets/locales/es_MX.js.erb の内容は非常に単純です。そのファイル内のロケールコードを必要なものに置き換えるようにしてください。
//= require locales/i18n
<%= JsLocaleHelper.output_locale(:es_MX) %>
config/locales の翻訳ファイル
config/locales/client.es_MX.yml および config/locales/server.es_MX.yml ファイルには、使用したい翻訳が含まれています。Discourse に必要なすべての翻訳を提供する義務はありません。翻訳が不足している場合は、fallbackLocale と英語が使用されます。
新しいロケールの追加
既存のロケールにフォールバックすべきでない、完全に新しいロケールを追加するには、もう少し作業が必要です。
プラグインのディレクトリ構造は次のようになります。
custom-locales
├── assets
│ └── locales
│ └── foo.js.erb
├── config
│ └── locales
│ ├── client.foo.yml
│ └── server.foo.yml
├── lib
│ └── javascripts
│ └── locale
│ ├── message_format
│ │ └── foo.js
│ └── moment_js
│ └── foo.js
│ └── moment_js_timezones
│ └── foo.js
└── plugin.rb
plugin.rb
register_locale を呼び出して、新しいロケールを追加します。
-
最初のパラメーターは必須で、言語コードである必要があります。
-
name(ロケールの英語名) とnativeName(ユーザーインターフェースに表示される名前) は、言語コードがnames.ymlに存在する場合は省略できます。存在しない場合は設定する必要があります。 -
pluralは言語の複数形ルールを記述します。インスピレーションとしてplurals.rbを確認してください。また、plurals.rbにすでに言語コードが含まれている場合は、このパラメーターを省略することもできます。
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale(
"foo",
name: "Foo",
nativeName: "Foo Bar",
plural: {
keys: [:one, :other],
rule: lambda { |n| n == 1 ? :one : :other }
}
)
.js.erb
assets/locales/foo.js.erb の内容は非常に単純です。そのファイル内のロケールコードを必要なものに置き換えるようにしてください。
//= require locales/i18n
<%= JsLocaleHelper.output_locale(:foo) %>
config/locales の翻訳ファイル
config/locales/client.foo.yml および config/locales/server.foo.yml ファイルには、使用したい翻訳が含まれています。Discourse に必要なすべての翻訳を提供する義務はありません。翻訳が不足している場合は、英語の翻訳が使用されます。
FAQ
Discourse がロケールを読み込みません。何が問題ですか?
プラグインが有効になっていること、ロケールが正しく登録されていること、およびすべての必要なファイルが存在し、ファイル名に正しい言語コードが含まれていることを確認してください。Discourse は、ファイルが見つからないことを検出するとロケールを読み込みません。
このドキュメントはバージョン管理されています。変更の提案はgithubで行ってください。