JavaScript Internationalizationの方法
ロケールのデータはサーバーしかしらないのだから、クライアントからサーバーサイドにメッセージデータを取得するのがいいんじゃないか?っていう話をつい最近しました。一見、理に適っているのですが、2点まずい点があります。
以下の2点で少し問題があります。
- メッセージデータ取得のためにリクエストを発生させるというのがパフォーマンス上よろしくない
- リクエストに失敗したときに画面が国際化されない可能性がある
では、どうすればよいのかを少し考えてみました。
- ビルド時にJavaScript(のテンプレート)を国際化してしまう
- 実行時にロケールに従い、JavaScriptのテンプレートをロードする
とするのがよいのかなと思うようになりました。
こうしておけば、上記の2点の問題が解決されます。リクエストは発生しないですし、実行時に必要なメッセージだけをロードすれば、クライアントサイドに複数の言語のメッセージを保持する必要もありません。そして、画面が国際化されない危険性もないわけです。
一見、この方法はとてもよい案に思えますが、この案では対応できない方法もあります。それは、パラメータを含むメッセージの国際化です。これはデータがクライアントサイドにないので、そもそもクライアントサイドだけでは国際化できません。ですから、このパターンについては、サーバーサイドで国際化されたメッセージをクライアントに返すということになります。