gt-node@0.2.0
概要
重要 このライブラリはまだ実験的な段階であり、後方互換性のない変更が加えられる可能性があります。
gt-node は General Translation をサーバーサイドの JavaScript 向けに提供します。Node.js、Bun、Deno で動作します。
AsyncLocalStorage を使ってリクエストごとのコンテキストを確立することで、gt-node から翻訳関数を直接インポートできるようになります。
const gt = await getGT();これは、非同期関数を扱う際の gt-next など他のライブラリの API と同様の仕様になっています。
含まれる内容
initializeGT()— i18n シングルトンを設定します。サーバー起動時に一度だけ呼び出します。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();ロケール用ミドルウェアを追加する
リクエストヘッダー(またはクッキーやクエリパラメーターなど、アプリでロケールを決定している任意の方法)からロケールを取得し、各リクエストを 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 時に翻訳され、実行時にはリクエストごとに解決されます。
今後の展望
gt-node と gt-tanstack-start は、gt-i18n シングルトンアーキテクチャ上に構築された最初の 2 つのライブラリです。今後、同じパターンに沿ったフレームワークアダプターがさらに追加されていく予定です。