返回

gt-node@0.2.0

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

概述

重要: 此库仍处于实验阶段,后续可能会有破坏性变更。

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

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-nodegt-tanstack-start 是首批基于 gt-i18n 单例架构构建的两个库。后续还会有更多框架适配器沿用这一模式。

欢迎通过 DiscordGitHub 反馈意见。