i18n 钩子从您的项目“locales”目录(默认情况下为 config/locales
)读取 JSON 格式的翻译文件。每个文件对应一个 语言环境(通常为语言),您的 Sails 后端将支持该语言环境。
这些文件包含特定于语言环境的字符串(作为 JSON 键值对),您可以在视图、控制器等中使用它们。文件名称应与您支持的语言匹配。这允许根据请求标头自动检测语言。
以下是一个语言环境文件示例 (config/locales/es.json
)
{
"Hello!": "Hola!",
"Hello %s, how are you today?": "¿Hola %s, como estas?"
}
可以通过 req.i18n()
在控制器操作和策略中访问语言环境,或者通过 __(key)
或 i18n(key)
函数在视图中访问语言环境。
<h1> <%= __('Welcome to PencilPals!') %> </h1>
<h2> <%= i18n('Hello %s, how are you today?', 'Pencil Maven') %> </h2>
<p> <%= i18n('That\'s right-- you can use either i18n() or __()') %> </p>
请注意,字符串文件中的键(例如 "Hello %s, how are you today?")是 **区分大小写的**,并且需要完全匹配。这里有几种不同的最佳方法,这实际上取决于谁在编辑字符串文件以及编辑的频率。特别是如果您要手动编辑翻译,则更简单、全小写的键名称可能更利于维护。
例如,以下是另一种处理 config/locales/es.json
的方法
{
"hello": "hola",
"howAreYouToday": "cómo estás"
}
以下为 config/locales/en.json
{
"hello": "hello",
"howAreYouToday": "how are you today"
}
要表示嵌套字符串,请在键中使用 .
。例如,以下是一些应用程序“编辑配置文件”页面的字符串
{
"editProfile.heading": "Edit your profile",
"editProfile.username.label": "Username",
"editProfile.username.description": "Choose a new unique username.",
"editProfile.username.placeholder": "callmethep4rtysquid"
}
要确定请求使用的当前语言环境,请使用 req.getLocale()
.
要覆盖自动检测到的请求语言/本地化首选项,请使用 req.setLocale()
,并使用新语言环境的唯一代码调用它,例如
// Force the language to German for the remainder of the request:
req.setLocale('de');
// (this will use the strings located in `config/locales/de.json` for translation)
默认情况下,node-i18n 将通过检查其语言标头来检测请求所需的语言。语言标头在用户的浏览器设置中设置,尽管它们在大多数情况下都是正确的,但您可能需要灵活地覆盖此检测到的语言环境并提供您自己的语言环境。要深入了解一种可能的实现方法,请查看 这个 gist.