Назад

gt-node@0.2.0

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

Обзор

ВАЖНО Эта библиотека всё ещё экспериментальная и может измениться с нарушением обратной совместимости.

gt-node добавляет поддержку General Translation в серверный JavaScript. Он работает в Node.js, Bun и Deno.

Создавая контекст для каждого запроса через AsyncLocalStorage, gt-node позволяет импортировать функции перевода напрямую из библиотеки:

const gt = await getGT();

Это соответствует API наших других библиотек, таких как gt-next, при работе с асинхронными функциями.


Что входит

  • 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();

Добавьте middleware для локали

Извлеките локаль из заголовков запроса (или cookies, query‑параметров — в зависимости от того, как ваше приложение определяет локаль) и оберните обработку каждого запроса в 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. Ожидайте появления новых адаптеров для фреймворков, следующих тому же подходу.

Мы будем рады обратной связи в Discord или на GitHub.