戻る

gt-i18n@0.9.0

Ernest McCarter avatarErnest McCarter
gt-i18ngt-nodedictionariesgetTranslationsi18n

概要

gt-i18n で、getTranslations() を介した辞書ベースの翻訳がサポートされるようになりました。これにより、gt-i18n も、辞書を主要な翻訳方式として採用する gt-nextgt-react、その他の i18n ライブラリと同様の形で利用できます。

パッケージバージョン
gt-i18n0.9.0
gt-node0.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 つのルールで決まります。

  1. 翻訳がない → デフォルトロケールにフォールバック。 キーがソース辞書に存在していても、現在のロケール向けの翻訳がない場合、t() はソーステキストを返します。
  2. ソースエントリがない → エラー。 キーがソース辞書にまったく存在しない場合、t() は例外をスローします。これは意図的な動作です。キーがソース内で定義されていない場合、それは翻訳漏れではなくバグです。この動作は、今後のリファクタリングで GT のすべてのライブラリに適用される予定です。

2 つ目のルールは、翻訳済み辞書がソース辞書の構造と一致していることを前提としています。GT はこの前提に基づいて翻訳を自動生成します。

リンク