跳转至主要内容
Hono

Hono 国际化

一个中间件检测请求语言,并为每个路由处理函数提供翻译器。消息来自 CDN,因此新文案无需重新部署即可上线。

Setup

用 Better I18N 配置 Hono

安装依赖包

添加 Hono 和服务端适配器,无需其他依赖。

terminal
npm install hono @better-i18n/server

创建 i18n 单例

在模块作用域中只创建一次——消息缓存在所有请求之间共享。

src/i18n.ts
import { createServerI18n } from '@better-i18n/server';

// Module scope, not per request: the TtlCache is shared across requests.
export const i18n = createServerI18n({
  project: 'your-org/your-project',
  defaultLocale: 'en',
});

挂载中间件

在 app.use 之后,每个处理函数都可以从上下文读取 locale 和 t。

src/index.ts
import { Hono } from 'hono';
import { betterI18n } from '@better-i18n/server/hono';
import type { Translator } from '@better-i18n/server';
import { i18n } from './i18n';

const app = new Hono<{
  Variables: { locale: string; t: Translator };
}>();

app.use('*', betterI18n(i18n));

app.get('/users/:id', (c) => {
  const t = c.get('t');
  return c.json({ error: t('errors.notFound') }, 404);
});

export default app;
Capabilities

Hono 团队为什么选择 Better I18N

一行配置:app.use('*', betterI18n(i18n))
基于 Web 标准——直接读取请求头,无需适配层
Hono 能跑的地方它都能跑:Cloudflare Workers、Bun、Deno 和 Node
模块作用域的实例在请求之间共享消息缓存
新消息约 60 秒内从 CDN 送达,无需重新部署
为 locale 和 t 提供带类型的上下文变量
Example

一个本地化的 Hono 路由

中间件先执行,因此处理函数只读取它需要的内容。

import { OpenAPIHono } from '@hono/zod-openapi';
import { betterI18n } from '@better-i18n/server/hono';
import type { Translator } from '@better-i18n/server';
import { i18n } from './i18n';

const app = new OpenAPIHono<{
  Variables: { locale: string; t: Translator };
}>();

// Detect locale + inject `locale` and `t` into every request context
app.use('*', betterI18n(i18n));

app.get('/greeting', (c) => {
  const t = c.get('t');
  const locale = c.get('locale');

  return c.json({
    locale,
    message: t('greeting.hello'),
  });
});

export default app;

其他框架

Get started

让你的 Hono API 支持每一种语言

连接项目、添加中间件,即可在不改动部署流程的情况下完成翻译。