gt-node@0.2.0
概述
重要: 此库仍处于实验阶段,后续可能会有破坏性变更。
gt-node 将 General Translation 带到服务端 JavaScript 环境中,可在 Node.js、Bun 和 Deno 中运行。
gt-node 通过 AsyncLocalStorage 为每个请求建立上下文,让你可以直接从库中导入翻译函数:
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();添加区域设置中间件
从请求头中提取区域设置 (也可以从 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 单例架构构建的两个库。后续还会有更多框架适配器沿用这一模式。