Назад

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 для локали

Извлеките локаль из заголовков запроса (или из 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 они переводятся, а во время выполнения разрешаются для каждого запроса.


Что дальше

gt-node и gt-tanstack-start — первые две библиотеки, построенные на синглтон-архитектуре gt-i18n. В дальнейшем по тому же принципу появятся и другие адаптеры для фреймворков.

Будем рады вашим отзывам в Discord или на GitHub.