gt-i18n@0.9.0
概要
gt-i18n で、getTranslations() を介した辞書ベースの翻訳がサポートされるようになりました。これにより、gt-i18n も、辞書を主要な翻訳方式として採用する gt-next、gt-react、その他の i18n ライブラリと同様の形で利用できます。
| パッケージ | バージョン |
|---|---|
gt-i18n | 0.9.0 |
gt-node | 0.7.0 |
セットアップ
プロジェクトのルートに、ソース言語 (英語) の文字列を含む dictionary.json ファイルを作成します。
{
"greeting": {
"hello": "Hello!"
},
"user": {
"welcome": "Welcome, {name}!"
},
"errors": {
"notFound": "Page not found",
"unauthorized": "Access denied"
}
}GT CLI (npx gtx translate) を実行すると、プロジェクトルートにある dictionary.json を自動的に検出し、設定されたロケール向けに翻訳します。
使用方法
上記のソース辞書がある場合は、getTranslations() を呼び出して、辞書内のエントリを参照する t 関数を取得します。
import { getTranslations } from 'gt-i18n';
const t = await getTranslations();
t('greeting.hello'); // "Hello!"
t('user.welcome', { name: 'Alice' }); // "Welcome, Alice!"t.obj() によるサブ辞書
t() は 1 つの文字列を返します。t.obj() は辞書のサブツリー全体をオブジェクトとして返します。
const t = await getTranslations();
t('errors.notFound'); // "ページが見つかりません"
const errors = t.obj('errors');
// { notFound: "ページが見つかりません", unauthorized: "アクセスが拒否されました" }翻訳された辞書にキーがない場合、不足しているエントリはソース辞書から補われます。つまり、翻訳が一部しかなくても実行時エラーは発生せず、未翻訳のキーはソーステキストにフォールバックします。
ルックアップの動作
ルックアップがどのように解決されるかは、次の 2 つのルールで決まります。
- 翻訳がない → デフォルトロケールにフォールバック。 キーがソース辞書に存在していても、現在のロケール向けの翻訳がない場合、
t()はソーステキストを返します。 - ソースエントリがない → エラー。 キーがソース辞書にまったく存在しない場合、
t()は例外をスローします。これは意図的な動作です。キーがソース内で定義されていない場合、それは翻訳漏れではなくバグです。この動作は、今後のリファクタリングで GT のすべてのライブラリに適用される予定です。
2 つ目のルールは、翻訳済み辞書がソース辞書の構造と一致していることを前提としています。GT はこの前提に基づいて翻訳を自動生成します。