通常,向 Discourse 添加新语言的最佳方法是创建拉取请求(pull request),如“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 来添加新的区域设置。
-
第一个参数是必需的,必须是语言代码。
-
如果语言代码存在于
names.yml中,则可以省略name(区域设置的英文名称)和nativeName(在用户界面中显示的名称)。 -
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 所需的所有翻译。如果缺少翻译,将使用后备区域设置和英语。
添加一个全新的区域设置
添加一个全新的、不应回退到现有区域设置的区域设置会多做一些工作。
您的插件目录结构应如下所示:
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 来添加新的区域设置。
-
第一个参数是必需的,必须是语言代码。
-
如果语言代码存在于
names.yml中,则可以省略name(区域设置的英文名称)和nativeName(在用户界面中显示的名称),否则也应该设置它们。 -
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 上建议更改。