Node.js + express + jade の環境で i18n-node を使って国際化してみた。

Node.js で express, jade, i18n-node を使って多言語対応したのでメモ。

けど、そもそも i18n って何か。

i18n とは

ソフトウェアである限られた言語でしか使えない状態から多言語が使えるように対応すること。 国際化。internationalization。 internationalization は,i で始まり n で終わる間に 18 文字あるから,i18n。 i18n とは - はてなキーワード http://d.hatena.ne.jp/keyword/i18n

環境

環境については以下の通り。i18n-node の GitHub を見ながら進めていきます。

  • Node.js v0.10.24
  • express v3.4.7
  • jade v1.0.2
  • i18n-node v0.4.1

i18n-node のインストール

$ npm install --save i18n

npm でインストールするだけ --save オプションを付けておくと、package.json に追記してくれるから楽。

app.js

var express = require('express')
var routes = require('./routes')
var user = require('./routes/user')
var http = require('http')
var path = require('path')

// i18n-node を読込
var i18n = require('i18n')

var app = express()

// all environments
app.set('port', process.env.PORT || 3000)
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'jade')
app.use(express.favicon())
app.use(express.logger('dev'))
app.use(express.json())
app.use(express.urlencoded())
app.use(express.methodOverride())

// i18n を利用する設定
i18n.configure({
  // 対応する言語を設定
  locales: ['ja', 'en'],
  directory: __dirname + '/locales'
})
// i18n の設定を有効化
app.use(i18n.init)

app.use(app.router)
app.use(express.static(path.join(__dirname, 'public')))

app.get('/', routes.index)

http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'))
})

i18n を require して、i18n を利用する設定を有効化するだけ。locales の配列には対応させる言語のコードを指定しておきます。directory には言語別の設定ファイルが格納されているディレクトリを指定します。

/locales/ja.js

{
    "Welcome to": "ようこそ"
}

/locales/en.js

{
    "Welcome to": "Welcome to"
}

言語の設定は、key:value の形で設定しておきます。key は全ての言語で共通で、value の値をそれぞれの言語で表示したい文言にしておきます。

index.jade

extends layout

block content
    h1=title
    p #{__('Welcome to')} #{title}

jade では、/locales/NAME.js で設定した key を __('key') の形で指定すると、ブラウザの言語設定によって表示が切り替わるようになりました。

i18n対応結果