gt-node@0.2.0
概览
重要 此库仍处于实验阶段,可能会发生破坏性变更。
gt-node 将 General Translation 带到服务端 JavaScript 环境,可运行在 Node.js、Bun 和 Deno 中。
通过使用 AsyncLocalStorage 为每个请求建立上下文,gt-node 允许你直接从库中导入翻译函数:
const gt = await getGT();在处理 async 函数时,其 API 与我们其他库(如 gt-next)中的保持一致。
包含内容
initializeGT()— 配置 i18n 单例。仅需在服务器启动时调用一次。withGT(locale, fn)— 包装请求处理函数以设置 locale 作用域。回调内部的所有翻译调用都会使用提供的 locale。所有路由都必须使用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();添加 locale 中间件
从请求头(或 cookies、查询参数等——取决于你的应用如何确定 locale)中提取 locale,并使用 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 单例架构构建的前两个库。后续还会有更多框架适配器按同样的模式推出。