express で国際化したい
あらすじ
そろそろ最初から国外を視野に入れてサービスを始めるご時世のようです。
準備
mkdir practice-i18 && cd $_ npm init --yes echo 'node_modules' > .gitignore git init && git add . && git commit -m 'initial commit' npm install express i18n --save npm install supertest power-assert --save-dev
以下は個人的な設定
echo '**/node_modules/' > .eslintignore curl -sO https://raw.githubusercontent.com/nodejs/node/master/.eslintrc sed -i -e 's/require-buffer: /# require-buffer: /' .eslintrc sed -i -e 's/new-with-error: /# new-with-error: /' .eslintrc git add .eslintignore .eslintrc && git commit -am 'use eslint'
国際化した例
create app.js:
'use strict'; const express = require('express'); const i18n = require('i18n'); const app = express(); i18n.configure({ locales: ['ja', 'en'], queryParameter: 'lang', directory: __dirname + '/locales' }); app.use(i18n.init); app.get('/', (req, res) => { console.log(res.locals.locale); res.send(res.__('Hello World')); }); if (!module.parent) { app.listen(3000, () => { console.log('Example app listening on port 3000!'); }); } module.exports = app;
create test_app.js:
/*global describe, it */ 'use strict'; const assert = require('power-assert'); const request = require('supertest'); const app = require('../app'); describe('GET /', function() { it('returns english', function(done) { request(app) .get('/') .expect(200) .end((err, res) => { assert.ok(res.text === 'Hello World'); done(); }); }); it('returns japanese', function(done) { request(app) .get('/?lang=ja') .expect(200) .end((err, res) => { assert.ok(res.text === 'こんにちは世界'); done(); }); }); });
create locales/en.json:
{ "Hello World": "Hello World" }
create locales/ja.json:
{ "Hello World": "こんにちは世界" }
動作確認
mocha で実行すると queryParams に応じて lang が指定されます。デフォルトだと en が指定されます。
ブラウザ経由で実行するとブラウザの言語設定に応じて app.localse.locale の値が反映されるので queryParams を指定しない場合はその値が使用されると思います。
おしまい