返回

gt-node@0.2.0

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

概览

重要 此库仍处于实验阶段,可能会发生破坏性变更。

gt-node 将 General Translation 带到服务端 JavaScript 环境,可运行在 Node.jsBunDeno 中。

通过使用 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-nodegt-tanstack-start 是基于 gt-i18n 单例架构构建的前两个库。后续还会有更多框架适配器按同样的模式推出。

欢迎通过 DiscordGitHub 提交反馈。