gt-node@0.2.0
Обзор
ВАЖНО Эта библиотека всё ещё остаётся экспериментальной, и в неё могут вноситься несовместимые изменения.
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. В дальнейшем по тому же принципу появятся и другие адаптеры для фреймворков.