戻る

gt-node@0.2.0

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

概要

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

gt-node は General Translation をサーバーサイドの JavaScript 向けに提供します。Node.jsBunDeno で動作します。

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-nodegt-tanstack-start は、gt-i18n シングルトンアーキテクチャ上に構築された最初の 2 つのライブラリです。今後、同じパターンに沿ったフレームワークアダプターがさらに追加されていく予定です。

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