gt-node@0.2.0
概要
重要 このライブラリはまだ実験的な段階にあり、互換性のない変更が加わる可能性があります。
gt-node を使うと、General Translation をサーバーサイド JavaScript で利用できます。Node.js、Bun、Deno で動作します。
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-node と gt-tanstack-start は、gt-i18n のシングルトンアーキテクチャを採用した最初の 2 つのライブラリです。今後は、同じパターンに従うフレームワークアダプターがさらに増える予定です。