JavaScript Internationalizationの方法

ロケールのデータはサーバーしかしらないのだから、クライアントからサーバーサイドにメッセージデータを取得するのがいいんじゃないか?っていう話をつい最近しました。一見、理に適っているのですが、2点まずい点があります。

以下の2点で少し問題があります。

  • メッセージデータ取得のためにリクエストを発生させるというのがパフォーマンス上よろしくない
  • リクエストに失敗したときに画面が国際化されない可能性がある

では、どうすればよいのかを少し考えてみました。

  • ビルド時にJavaScript(のテンプレート)を国際化してしまう
  • 実行時にロケールに従い、JavaScriptのテンプレートをロードする

とするのがよいのかなと思うようになりました。

こうしておけば、上記の2点の問題が解決されます。リクエストは発生しないですし、実行時に必要なメッセージだけをロードすれば、クライアントサイドに複数の言語のメッセージを保持する必要もありません。そして、画面が国際化されない危険性もないわけです。

一見、この方法はとてもよい案に思えますが、この案では対応できない方法もあります。それは、パラメータを含むメッセージの国際化です。これはデータがクライアントサイドにないので、そもそもクライアントサイドだけでは国際化できません。ですから、このパターンについては、サーバーサイドで国際化されたメッセージをクライアントに返すということになります。