もしあなたのアプリが世界中の人々やシステムに触れる場合、国際化とローカリゼーション("i18n"としても知られています)は、あなたの国際戦略において重要な部分となるでしょう。これは、主なユーザーベースが異なる言語に分かれているアプリケーションにとって特に重要です。例えば、スペイン語と英語の両方のコンテンツを提供するチュートリアルサイトや、ケベック州とブリティッシュコロンビア州全体に顧客を持つオンラインストアなどです。
幸いなことに、Sailsはユーザーの言語設定を検出し、静的な単語や文を翻訳するための組み込みサポートを提供しています。Sails v1以降、これは軽量なi18n-node-2
パッケージを使用して実装されています。このパッケージは、ここで説明する以上の追加オプションをいくつか提供しており、それについてはREADMEファイルで確認できます。しかし、基本的な国際化要件を持つ多くのNode.js/Sails.jsアプリにとって、以下のシンプルな使用方法だけで十分でしょう。
Sailsでは、リクエストヘッダーで指定されたロケールを使用して単語やフレーズを簡単に翻訳できます。
ビューから
<h1> <%= __('Hello') %> </h1>
<h1> <%= __('Hello %s, how are you today?', 'Mike') %> </h1>
<p> <%= i18n('That\'s right-- you can use either i18n() or __()') %> </p>
ブラウザやデバイスの言語ヘッダーをオーバーライドすることが便利な場合があります。例えば、ユーザーが自分の言語設定を設定できるようにしたい場合などです。そのような設定がセッションベースであるか、データベース内のアカウントに関連付けられているかに関わらず、req.setLocale()
を使用することで非常に簡単に実現できます。
最後に、Sailsを使用してコマンドラインスクリプトを構築している場合や、その他の高度なユースケースを追求している場合、アプリケーション内のほぼどこからでもsails.__
を使用して、設定されたデフォルトロケールに任意の文字列を翻訳することもできます。
sails.__('Welcome');
// => 'Bienvenido'
sails.__('Welcome, %s', 'Mary');
// => 'Bienvenido, Mary'
ロケールファイル(別名「文字列ファイル」)の作成については、概念 > 国際化 > ロケールを参照してください。
ローカリゼーション/国際化の設定は、config/i18n.js
で設定できます。これらの設定を変更する必要がある最も一般的な理由は、アプリでサポートされるロケールのリストを編集することです。
Node.js/Sails.jsアプリの国際化設定の構成の詳細については、sails.config.i18nを参照してください。
もちろん、プロジェクト内の任意の場所で、好きなNodeモジュールをrequire()
して、任意の国際化戦略を使用できます。
ただし、Sailsはnode-i18n-2の統合をi18nフックで実装しているため、loadHooks
またはhooks
の構成オプションを使用して、完全に無効化またはオーバーライドできます。
概念 > 国際化 > 動的コンテンツの翻訳を参照してください。
上記のテクニックは、サーバー側のビューに対してすぐにうまく機能します。しかし、CDNや静的ホストから静的なHTMLテンプレートを提供するリッチクライアントアプリはどうでしょうか?
最も簡単な方法は、サーバーレンダリングされたビューからの国際化を続けることです。しかし、それを避けたい場合は、クライアント側の国際化にはさまざまなオプションが利用可能です。他のクライアント側テクノロジーと同様に、それらをSailsに統合するのに問題はないはずです。
外部の国際化ライブラリを使用したくない場合は、Sailsのi18nサポートを再利用して、翻訳されたテンプレートをブラウザに取得することができます。Sailsを使用してクライアント側のテンプレートを国際化したい場合は、アプリの
/views
フォルダーのサブディレクトリにフロントエンドテンプレートを配置します。
- 開発モードでは、関連する文字列ファイルまたはテンプレートが変更されるたびに、grunt-contrib-watchを使用してテンプレートを再翻訳およびプリコンパイルする必要があります。これは、新しいSailsプロジェクトにデフォルトでインストールされています。
- 本番モードでは、lift()時にすべてのテンプレートを翻訳およびプリコンパイルする必要があります。ロード時間が重要なシナリオ(モバイルWebアプリなど)では、翻訳、プリコンパイル、ミニファイされたテンプレートをCloudfrontなどのCDNにアップロードして、さらにパフォーマンスを向上させることもできます。