Hono
Hono i18n
Jeden middleware rozpozná jazyk požadavku a předá překladač každému handleru trasy. Texty přicházejí z CDN, takže nový obsah vyjde bez opětovného nasazení.
Setup
Nastavte Hono s Better I18N
Nainstalujte balíčky
Přidejte Hono a serverový adaptér. Nic dalšího není potřeba.
terminal
npm install hono @better-i18n/serverVytvořte singleton i18n
Vytvořte jej jednou na úrovni modulu — cache zpráv je sdílená napříč všemi požadavky.
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',
});Připojte middleware
Po app.use může každý handler číst locale a t z kontextu.
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
Proč si týmy Hono vybírají Better I18N
Jeden řádek nastavení: app.use('*', betterI18n(i18n))
Postaveno na webových standardech — hlavičky požadavku se čtou přímo, bez vrstvy adaptéru
Běží všude, kde běží Hono: Cloudflare Workers, Bun, Deno a Node
Instance na úrovni modulu sdílí cache zpráv napříč požadavky
Nové texty dorazí z CDN přibližně za 60 sekund, bez opětovného nasazení
Typované kontextové proměnné pro locale a t
Example
Lokalizovaná trasa Hono
Middleware běží jako první, takže handler čte jen to, co potřebuje.
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;Související témata
Další frameworky
Get started
Vydejte své Hono API v každém jazyce
Připojte projekt, přidejte middleware a překládejte, aniž byste sahali na nasazovací pipeline.