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 支持每一种语言
连接项目、添加中间件,即可在不改动部署流程的情况下完成翻译。