i18nフックは、プロジェクトの"locales"ディレクトリ(デフォルトではconfig/locales
)からJSON形式の翻訳ファイルを読み込みます。各ファイルは、Sailsバックエンドがサポートするロケール(通常は言語)に対応しています。
これらのファイルには、ビュー、コントローラーなどで使用できるロケール固有の文字列(JSONのキーと値のペアとして)が含まれています。ファイル名は、サポートする言語と一致する必要があります。これにより、リクエストヘッダーに基づいて自動的に言語を検出できます。
ロケールファイルの例(config/locales/es.json
)を以下に示します。
{
"Hello!": "Hola!",
"Hello %s, how are you today?": "¿Hola %s, como estas?"
}
ロケールには、コントローラーのアクションやポリシーではreq.i18n()
を介して、ビューでは__(key)
またはi18n(key)
関数を使用してアクセスできます。
<h1> <%= __('Welcome to PencilPals!') %> </h1>
<h2> <%= i18n('Hello %s, how are you today?', 'Pencil Maven') %> </h2>
<p> <%= i18n('That\'s right-- you can use either i18n() or __()') %> </p>
文字列ファイル内のキー(例:"Hello %s, how are you today?")は大文字と小文字が区別され、完全一致が必要です。最適なアプローチにはいくつかの考え方がありますが、それは文字列ファイルを編集する人や編集頻度によって異なります。特に手動で翻訳を編集する場合は、保守性の観点から、シンプルで全て小文字のキー名の方が好ましい場合があります。
例として、config/locales/es.json
への別のアプローチを示します。
{
"hello": "hola",
"howAreYouToday": "cómo estás"
}
そして、config/locales/en.json
はこちらです。
{
"hello": "hello",
"howAreYouToday": "how are you today"
}
ネストされた文字列を表すには、キーに.
を使用します。例として、アプリの「プロフィール編集」ページの文字列をいくつか示します。
{
"editProfile.heading": "Edit your profile",
"editProfile.username.label": "Username",
"editProfile.username.description": "Choose a new unique username.",
"editProfile.username.placeholder": "callmethep4rtysquid"
}
リクエストで使用されている現在のロケールを確認するには、req.getLocale()
を使用します。
リクエストの自動検出された言語/ローカライズ設定を上書きするには、新しいロケールの固有コード(例:)を使用してreq.setLocale()
を呼び出します。
// Force the language to German for the remainder of the request:
req.setLocale('de');
// (this will use the strings located in `config/locales/de.json` for translation)
デフォルトでは、node-i18nは、言語ヘッダーを調べてリクエストの必要な言語を検出します。言語ヘッダーはユーザーのブラウザ設定で設定され、ほとんどの場合正しいですが、この検出されたロケールを上書きして独自のロケールを提供する柔軟性が必要になる場合があります。これを実装する方法の詳細については、このgistを参照してください。