如果您的應用程式將接觸來自世界各地的人員或系統,那麼國際化和在地化(也稱為 "i18n")可能是您國際策略的重要組成部分。對於主要使用者群分佈在不同語言的應用程式而言,這尤其重要:例如,一個同時提供西班牙文和英文內容的教學網站,或是一個客戶遍及魁北克和不列顛哥倫比亞的線上商店。
幸運的是,Sails 提供了內建支援,可以偵測使用者語言偏好並翻譯靜態詞語/句子。從 Sails v1 開始,這是使用輕量級的 i18n-node-2
套件 實作的。這個套件提供了比這裡涵蓋的更多的額外選項,您可以在其 README 檔案中閱讀相關資訊。但是對於許多具有基本國際化需求的 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 重新翻譯和預編譯您的範本,grunt-contrib-watch 預設已安裝在新的 Sails 專案中。
- 在生產模式下,您會希望在 lift() 時翻譯和預編譯所有範本。在載入時間關鍵的場景中(例如行動網路應用程式),您甚至可以將翻譯、預編譯、最小化的範本上傳到像 Cloudfront 這樣的 CDN,以獲得進一步的效能提升。