2012年1月11日 星期三

NodeJS + Express + i18next 支援多國語系吧!

Standard
除非是區域性的網站服務,不然在這個網路通全世界的時代,開發網站服務就一定有多國語系的需求。一般來說,i18n 的支援都是由 Web Framework 所提供,但 Express 並沒有支援,所以我們要借助 i18next 這個模組。i18next 可以和 Express 以及 template 很完美的結合,最重要的是,有客戶端支援(clientside support),若搭配 jquery,我們也可以使前端的 JavaScript 支援多國語系。

先使用 NPM 安裝 i18next:
npm install i18next

在 express 的應用程式(app.js)中引入使用 i18next:
var express = require('express');
var i18n = require('i18next');

var app = module.exports = express.createServer();

/* Initializing i18n */
i18n.init();
i18n.registerAppHelper(app);

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(i18n.handle);
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.get('/', function(req, res) {
  res.render('index');
});

app.listen(3000);

接著要在應用程式的目錄下,建立預設的翻譯檔和存放路徑(locales/dev/translation.json):
{
  "example": {
    "string1": "Hello World!"
  }
}

如果要支援繁體中文(zh-TW),直接建立相應的翻譯檔(locales/zh-TW/translation.json):
{
  "example": {
    "string1": "哈囉 世界!"
  }
}

然後就可以在 template 中使用之前所定義的字串(views/index.jade):
span= t('example.string1')

完成之後,i18next 會自動依照用戶瀏覽器的語系設定,回應相對應的頁面。


後記

文章一開頭有提到,i18next 可以配合 jquery 使用,有興趣的人可以直接參考『官方說明』。