どうも、katです!
Node.jsのフレームワークであるexpressを使っていて、認証やバリデーションで、英語のメッセージが表示されることってありますよね。
日本語に書き換えようにも、モジュール内で定義されている箇所を書き換えるとかは抵抗があります。
そんなときに、viewに表示する際に日本語に置き換えることができたら便利ですよね。
今回は、そのやり方について書いていこうと思います。(基本的にコピペでできるので、簡単です!)
前提
前提として、下記が必要です。
- Node.js、npmのインストール(Node.jsのインストールについてはこちら)
- expressのインストール
多言語化モジュール追加
それではまず、多言語化に必要なi18nというモジュールを追加します。
$ npm install i18n
locales(言語対応リスト)を作成する
次に、日本語にしたい文言毎に、対応表(json)を作成していきます。
まずは、下記ディレクトリとファイルを作成します。
$ mkdir locales
$ cd locales
$ touch ja.json
次に、中身を記載します。※後述しますが、ここに記載しなくても、アプリを動かしていると勝手に追加されていくので、全て網羅する必要はありません。
・ja.json
{
"Hello": "こんにちは"
}
app.js修正
次に、app.jsを修正していきます。
気を付けないといけないのは、各画面のルーティングをuseする前に書かないと「__ is not defined」というエラーになりますので、気を付けましょう。
・app.js
var i18n = require("i18n");
// 多言語化の利用設定
i18n.configure({
// 利用するlocalesを設定。これが辞書ファイルとひも付きます
locales: ['ja', 'en'],
defaultLocale: 'ja',
// 辞書ファイルのありかを指定
directory: __dirname + "/locales",
// オブジェクトを利用したい場合はtrue
objectNotation: true
});
app.use(i18n.init);
// manualでi18nセッション管理できるように設定しておきます
app.use(function (req, res, next) {
if (req.session.locale) {
i18n.setLocale(req, req.session.locale);
}
next();
});
↑app.use(‘/’, indexRouter)などの前に記載します!!
view側修正
viewでは、日本語化したい文言を、”<%- __(“と “)%>“で囲みます。
<%- __("Hello") %>
変数の場合
<%- __(message) %>
配列の場合
<% messages.forEach(function (message) { %>
<%- __(message) %>
<% }); %>
また、上記で囲まれた文言がlocalesのリストに存在しない場合は、勝手に追加されますので、漏れが出にくくて便利です!
最後に
いかがだったでしょうか?
やり方さえ間違えなければ、30分もあれば簡単に導入できる方法かと思いますので、是非やってみてください!
以上、「 expressで多言語化(日本語化)する方法」でした~。
よろしければ以下も見てみて下さい。