# General Translation Knowledge Base: Node.js アプリを翻訳するには？
URL: https://generaltranslation.com/ja/kb/translate-node-app.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 各リクエストの言語を（通常は Accept-Language ヘッダーから）検出し、すべての文字列をその言語で返します。General Translation の gt-node では、withGT でリクエストごとにロケールを関連付け、getGT で文字列を翻訳します。翻訳は、デプロイ前に npx gt translate --publish で生成しておきます。
Category: 国際化
Last updated: 2026-10-21
Authors: Kevin Liu, Kevin Wu
Published: 2026-10-21

Node.js アプリの翻訳とは、各リクエストの言語を (通常は `Accept-Language` ヘッダーから) 検出し、すべての文字列をその言語で返すことです。難しいのは、1 台のサーバーが多数のユーザーを同時に処理するため、言語をグローバルな設定にはできない点です。言語はリクエストごとに異なり、レスポンスを組み立てるすべての関数がその言語を参照する必要があります。さらに、値を含む文字列には言語ごとの文法規則も必要です。たとえば数量を表す場合、英語には 2 つの複数形がありますが、アラビア語には 6 つあります。

## Video

The video is narrated in English, with English captions.

[How do I translate a Node.js app?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-translate-node-app.mp4) (48 秒)

General Translation lets you translate strings into each request's locale with `gt-node`. Call `initializeGT` once, wrap each request in `withGT`, await `getGT` in a handler, list `server.js` in `gt.config.json`, sign in, and run `npx gt translate`.

## Node.js アプリを翻訳する方法

| アプローチ                                                                 | 得意なこと                                                                                                                     | リクエストごとのロケール                                              | 自分で対応すること                                                                                                                                                               |
| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 国際化 (i18n) ライブラリ単体 ([`i18next`](/kb/general-translation-vs-i18next))  | 翻訳のレンダリングと値のフォーマットを担う成熟したランタイム                                                                                            | ミドルウェアプラグインが検出する                                          | 言語ごとに 1 つの JSON キーファイルへ文字列を抽出し、各翻訳を作成し、文言が変わるたびにすべてのファイルを更新する                                                                                                           |
| [`nestjs-i18n`](/kb/general-translation-vs-nestjs-i18n) (NestJS)      | 言語ごとの JSON または YAML カタログからメッセージをレンダリングする。HTTP、GraphQL、gRPC、WebSockets に対応                                                 | リゾルバーがクエリ文字列、ヘッダー、クッキー、`Accept-Language` を、指定した順序で読み取る    | すべての言語のカタログを作成し、常に最新の状態に保つ                                                                                                                                              |
| リクエスト時の機械翻訳 API (DeepL、Google Cloud Translation)                      | 実行時にしか存在しないコンテンツも含め、あらゆるテキストを翻訳できる                                                                                        | 呼び出しごとに対象言語を渡す                                            | 結果をキャッシュしない限りリクエストごとに発生するレイテンシとコスト、用語の統一、複数形、レビュー                                                                                                                       |
| General Translation (`gt-node` と `gt` CLI)                            | 文字列はハンドラー内の `gt()` 呼び出しにインラインで記述したまま、デプロイ前に [`npx gt translate --publish`](/docs/cli/reference/commands/translate) で翻訳できる | [`withGT`](/docs/node/reference/functions/with-gt) が関連付ける | [`npx gt init`](/docs/cli/reference/commands/init) で生成されるプロジェクトIDと `gt.config.json`、[`gt login`](/docs/cli/reference/commands/login) または APIキー、ビルドまたはデプロイ工程への CLI の組み込み |

チームですでに翻訳済みカタログを管理している場合は、`i18next` または `nestjs-i18n` を単体で使用してください。リクエスト時の機械翻訳 API は、ユーザー投稿など実行時にしか存在しないコンテンツに限って使用しましょう。文字列がハンドラー内にあり、リリースのたびに変更される場合は `gt-node` が適しています。API がデータとエラーコードのみを返し、すべてのメッセージを Web やモバイルのクライアントでレンダリングする場合は、もっとシンプルなセットアップで十分です。クライアント側で翻訳しましょう。

## gt-node で Node.js アプリを翻訳する

1. 起動時に一度だけ、ロケールを指定して [`initializeGT`](/docs/node/reference/functions/initialize-gt) を呼び出します。

2. 各リクエストを [`withGT`](/docs/node/reference/functions/with-gt) でラップします。`withGT` は `AsyncLocalStorage` を使ってロケールを関連付けるため、同時に処理されるリクエストでもそれぞれのロケールが保持されます。ロケールは [`getRequestLocale`](/docs/node/reference/functions/get-request-locale) が `Accept-Language` から読み取ります。

3. ハンドラー内で [`getGT`](/docs/node/reference/functions/get-gt) を呼び出すと、`gt()` 関数を取得できます。この関数は複数形を含む ICU メッセージを受け取り、意味が曖昧な語句には `$context` オプションで文脈を指定できます。

   ```js title="server.js"
   import express from 'express';
   import { initializeGT, withGT, getRequestLocale, getGT } from 'gt-node';

   initializeGT({ defaultLocale: 'en', locales: ['en', 'es', 'fr'] });
   const app = express();
   app.use((req, res, next) => withGT(getRequestLocale(req), () => next()));

   app.get('/api/greeting', async (req, res) => {
     const gt = await getGT();
     res.json({ message: gt('Hello, {name}!', { name: 'Alice' }) });
   });
   app.listen(3000, () => console.log('Listening on http://localhost:3000'));
   ```

4. デプロイする前に、プロジェクト設定で CDN を有効にし、[`npx gt translate --publish`](/docs/cli/reference/commands/translate) を実行します。

本番環境では、`gt-node` が `GT_PROJECT_ID` のプロジェクトIDに対応する翻訳を General Translation CDN から取得します。翻訳が見つからない場合は、翻訳元文字列にフォールバックします。

## クライアントアプリと用語を共有する

Web またはモバイルのクライアントでも General Translation を使用している場合は、ダッシュボードの **プロジェクト &gt; Context** から、そのクライアントのコンテキストグループ (用語集とカスタムプロンプト) をサーバーのプロジェクトに割り当ててください。こうすることで、API レスポンスに含まれる新しい翻訳にも同じ用語が適用されます。詳しい手順については、[Node.js クイックスタート](/docs/node/quickstart)を参照してください。

## Related questions

- [React アプリを翻訳するには？](https://generaltranslation.com/ja/kb/translate-react-app.mdx): React アプリを翻訳するには、まずコンポーネントを国際化してユーザーの言語でレンダリングできるようにし、次にすべての文字列をサポート対象の各言語に翻訳します。General Translation の gt-react は `<T>` コンポーネント内の JSX をインプレースで翻訳し、npx gt translate は言語ごとに 1 つのファイルを書き出します。
- [Vue アプリを翻訳するにはどうすればよいですか？](https://generaltranslation.com/ja/kb/translate-vue-app.mdx): Vue アプリを翻訳するには、各テンプレート文字列をアクティブな言語に応じて参照される形にし、すべての対象言語に翻訳します。General Translation の gt-vue プラグインは `<T>` コンポーネントでラップされたコンテンツを翻訳し、npx gt translate は対象言語ごとに 1 つのカタログを書き出します。
- [Next.js App Router アプリに i18n を追加するには？](https://generaltranslation.com/ja/kb/add-i18n-to-nextjs.mdx): まず gt init を実行して、対応する App Router プロジェクトに General Translation を設定します。次にソースコンテンツをマークし、翻訳を生成して、言語の切り替えが機能することを確認します。gt-next はテキストを翻訳の文脈とともに JSX 内に保持し、生成、レビュー、継続的な更新は CLI、ダッシュボード エディター、Locadex が担います。このガイドでは、ローカルファイルを明示的に使うセットアップ方法も紹介します。
- [デプロイのたびに翻訳を最新の状態に保つにはどうすればよいですか？](https://generaltranslation.com/ja/kb/translations-in-ci.mdx): 本番環境のビルド前に、翻訳をパイプラインのステップとして毎回実行します。こうすることで、新しいテキストは追加されたデプロイと同時に翻訳済みの状態でリリースされます。General Translation の gt CLI では、CI シークレットとして保存したプロジェクトの APIキーとプロジェクトIDを使い、npx gt translate でこれを実現します。

## Previous and next questions

- Previous question: [Next.js App Router アプリに i18n を追加するには？](https://generaltranslation.com/ja/kb/add-i18n-to-nextjs.mdx)
- Next question: [React Native アプリを翻訳するにはどうすればよいですか？](https://generaltranslation.com/ja/kb/translate-react-native-app.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/ja/kb/sitemap.md) for every article.
