# General Translation Changelog: gt-i18n 0.9.0: 辞書ベースの翻訳
URL: https://generaltranslation.com/ja/blog/gt-i18n_v0_9_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Ernest McCarter
Published: 2026-05-07

## 概要

`gt-i18n` で、フレームワークインテグレーション向けの辞書ベースの翻訳が提供されるようになりました。Node.js アプリケーションでは、`gt-node` が公開している [`getTranslations()`](/docs/node/reference/functions/get-translations) を使用してください。`gt-i18n@0.9.0` はパッケージルートからこれをエクスポートしていません。

| パッケージ     | バージョン   |
| --------- | ------- |
| `gt-i18n` | `0.9.0` |
| `gt-node` | `0.7.0` |

## セットアップ

プロジェクトのルートに、ソース言語 (英語) の文字列を含む `dictionary.json` ファイルを作成します。

```json title="dictionary.json"
{
  "greeting": {
    "hello": "Hello!"
  },
  "user": {
    "welcome": "Welcome, {name}!"
  },
  "errors": {
    "notFound": "Page not found",
    "unauthorized": "Access denied"
  }
}
```

CLI ([`npx gt translate`](/docs/cli/reference/commands/translate)) を実行すると、プロジェクトルートにある `dictionary.json` を検出し、設定されたロケール向けに翻訳します。

Node.js ランタイムを [`initializeGT`](/docs/node/reference/functions/initialize-gt) で設定します。

```ts
import { initializeGT } from 'gt-node';
import dictionary from './dictionary.json';

initializeGT({
  defaultLocale: 'en',
  locales: ['en', 'es'],
  dictionary,
});
```

<Accordions>
  <Accordion title="独自の辞書を使用する">
    独自に事前翻訳した辞書を読み込みたい場合は、`gt-node` の初期化時に非同期の [`loadDictionary`](/docs/node/reference/config#load-dictionary) オプションを渡します。デフォルトの辞書は引き続き明示的に指定する必要があります。このローダーは翻訳済みロケールを提供します。

    ```ts
    import { initializeGT } from 'gt-node';
    import dictionary from './dictionary.json';

    initializeGT({
      defaultLocale: 'en',
      locales: ['en', 'es'],
      dictionary,
      loadDictionary: async (locale) => {
        const dict = await import(`./locales/${locale}.json`);
        return dict.default;
      },
    });
    ```

    このローダーは、生成された辞書を取得する代わりに、独自の翻訳済み辞書を提供します。
  </Accordion>
</Accordions>

## 使用方法

上記のソース辞書がある場合は、[`getTranslations()`](/docs/node/reference/functions/get-translations) を呼び出して、辞書内のエントリを参照する `t` 関数を取得します。

```ts
import { getTranslations, withGT } from 'gt-node';

await withGT('en', async () => {
  const t = await getTranslations();

  t('greeting.hello'); // "Hello!"
  t('user.welcome', { name: 'Alice' }); // "Welcome, Alice!"
});
```

### `t.obj()` によるサブ辞書

`t()` は 1 つの文字列を返します。`t.obj()` は辞書のサブツリー全体をオブジェクトとして返します。

```ts
// 上記の withGT コールバック内:
t('errors.notFound'); // "ページが見つかりません"

const errors = t.obj('errors');
// { notFound: "ページが見つかりません", unauthorized: "アクセスが拒否されました" }
```

翻訳された辞書にキーがない場合、不足しているエントリはソース辞書から補われます。つまり、翻訳が一部しかなくても実行時エラーは発生せず、未翻訳のキーはソーステキストにフォールバックします。

## ルックアップの動作

ルックアップがどのように解決されるかは、次の 2 つのルールで決まります。

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

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

## リンク

* [PR #1359](https://github.com/generaltranslation/gt/pull/1359)
* [`getTranslations` APIリファレンス](/docs/node/reference/functions/get-translations)
* [辞書ガイド](/docs/react/guides/translating-with-dictionaries)

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
