Přejít na obsah
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/server

Vytvoř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;

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.