如果您的应用程序将涉及来自世界各地的人员或系统,那么国际化和本地化(也称为“i18n”)可能是您国际化战略的重要组成部分。这对于主要用户群分布在不同语言的应用程序尤其重要:例如,一个提供西班牙语和英语内容的教程网站,或者一个在魁北克和不列颠哥伦比亚省各地拥有客户的在线商店。
幸运的是,Sails 提供了内置支持来检测用户语言偏好和翻译静态单词/句子。从 Sails v1 开始,这是使用轻量级 i18n-node-2
包 实现的。此包提供了超出此处介绍内容的多个其他选项,您可以在其自述文件中阅读这些选项。但是对于许多具有基本国际化需求的 Node.js/Sails.js 应用程序,以下简单的用法就足够了。
在 Sails 中,可以使用请求头中指定的区域设置轻松地翻译单词和短语
从视图中
<h1> <%= __('Hello') %> </h1>
<h1> <%= __('Hello %s, how are you today?', 'Mike') %> </h1>
<p> <%= i18n('That\'s right-- you can use either i18n() or __()') %> </p>
有时,覆盖浏览器/设备语言头很有用——例如,如果您想允许用户设置自己的语言偏好。无论此类偏好是基于会话的还是与数据库中的帐户相关联,使用 req.setLocale()
实现起来都非常简单。
最后,如果您正在使用 Sails 构建 命令行脚本 或正在进行其他一些高级用例,您还可以使用 sails.__
将任意字符串翻译为您配置的默认区域设置,几乎可以在应用程序的任何位置使用。
sails.__('Welcome');
// => 'Bienvenido'
sails.__('Welcome, %s', 'Mary');
// => 'Bienvenido, Mary'
有关创建区域设置文件(也称为“字符串文件”)的更多信息,请参阅 概念 > 国际化 > 区域设置。
本地化/国际化设置可以在 config/i18n.js
中配置。您需要修改这些设置的最常见原因是编辑应用程序支持的区域设置列表。
有关配置 Node.js/Sails.js 应用程序的国际化设置的更多信息,请参阅 sails.config.i18n。
当然,您始终可以在项目的任何位置require()
任何您喜欢的 Node 模块,并使用任何您想要的国际化策略。
但值得注意的是,由于 Sails 在 i18n hook 中实现了 node-i18n-2 集成,因此您可以使用 loadHooks
和/或 hooks
配置选项完全禁用或覆盖它。
请参阅 概念 > 国际化 > 翻译动态内容。
上述技术对于服务器端视图来说非常有效。但是,从 CDN 或静态主机提供静态 HTML 模板的富客户端应用程序呢?
嗯,最简单的选项是从服务器渲染的视图中继续进行国际化。但是,如果您不想这样做,则有 许多不同的选项可用于客户端国际化。与其他客户端技术一样,您应该能够毫无问题地将任何这些选项与 Sails 集成。
如果您不想使用外部国际化库,实际上可以使用 Sails 的 i18n 支持来帮助您将翻译后的模板发送到浏览器。如果您想使用 Sails 对客户端模板进行国际化,请将您的前端模板放在应用程序
/views
文件夹的子目录中。
- 在开发模式下,每次相关字符串文件或模板发生更改时,您都应该使用 grunt-contrib-watch 重新翻译和预编译模板,该模板已默认安装在新 Sails 项目中。
- 在生产模式下,您需要在 lift() 上翻译和预编译所有模板。在加载时间关键的场景(例如移动 Web 应用程序)中,您甚至可以将翻译后的、预编译的、最小化的模板上传到像 Cloudfront 这样的 CDN,以进一步提高性能。