戻る

gt-node@0.2.0

Ernest McCarter avatarErnest McCarter
gt-nodev0.2.0nodeexpressi18nasync-local-storageserver-side

概要

重要 このライブラリはまだ実験的な段階にあり、互換性のない変更が加わる可能性があります。

gt-node を使うと、General Translation をサーバーサイド JavaScript で利用できます。Node.jsBunDeno で動作します。

AsyncLocalStorage によって per-request コンテキストを確立することで、gt-node ではライブラリから翻訳関数を直接インポートできます。

const gt = await getGT();

これは、非同期関数を扱う際の gt-next など他のライブラリの API と同じです。


含まれるもの

  • initializeGT() — i18n シングルトンを設定します。サーバーの起動時に 1 回だけ呼び出します。
  • withGT(locale, fn) — リクエストハンドラーをラップして、そのスコープ内のロケールを設定します。コールバック内のすべての翻訳呼び出しは、指定したロケールを使用します。すべてのルートは withGT でラップする必要があります。
  • getGT() — インライン文字列用の翻訳関数を返します。変数補間と ICU メッセージ形式をサポートします。

クイックスタート (Express)

インストール

npm install gt-node

初期化

import express from 'express';
import { initializeGT, withGT, getGT } from 'gt-node';

initializeGT({
  defaultLocale: 'en-US',
  locales: ['en-US', 'es', 'fr'],
  projectId: process.env.GT_PROJECT_ID,
});

const app = express();

ロケール用ミドルウェアを追加する

リクエストヘッダー (または Cookie、クエリパラメータなど、アプリでロケールを判定する方法) からロケールを取得し、各リクエストを withGT でラップします:

app.use((req, res, next) => {
  const locale = req.headers['accept-language']?.split(',')[0] || 'en-US';
  withGT(locale, () => next());
});

翻訳

app.get('/api/greeting', async (req, res) => {
  const gt = await getGT();
  res.json({ message: gt('Hello, world!') });
});

app.listen(3000);

翻訳とデプロイ

npx gtx-cli translate --publish

以上です。文字列はビルド時に GT コンパイラによって検出され、CD 中に翻訳され、runtime ではリクエストごとに解決されます。


今後について

gt-nodegt-tanstack-start は、gt-i18n のシングルトンアーキテクチャを採用した最初の 2 つのライブラリです。今後は、同じパターンに従うフレームワークアダプターがさらに増える予定です。

フィードバックは Discord または GitHub までお寄せください。