Vai al contenuto
Hono

Hono i18n

Un middleware rileva la lingua della richiesta e passa un traduttore a ogni handler. I messaggi arrivano dalla CDN, quindi i nuovi testi vengono pubblicati senza un nuovo deploy.

Setup

Configura Hono con Better I18N

Installa i pacchetti

Aggiungi Hono e l'adattatore server. Non serve altro.

terminal
npm install hono @better-i18n/server

Crea il singleton i18n

Crealo una sola volta a livello di modulo: la cache dei messaggi è condivisa tra tutte le richieste.

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',
});

Monta il middleware

Dopo app.use, ogni handler può leggere locale e t dal contesto.

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

Perché i team Hono scelgono Better I18N

Una riga di configurazione: app.use('*', betterI18n(i18n))
Basato sugli standard web: gli header della richiesta vengono letti direttamente, senza livello di adattamento
Funziona ovunque giri Hono: Cloudflare Workers, Bun, Deno e Node
Un'istanza a livello di modulo condivide la cache dei messaggi tra le richieste
I nuovi messaggi arrivano dalla CDN in circa 60 secondi, senza nuovo deploy
Variabili di contesto tipizzate per locale e t
Example

Una route Hono localizzata

Il middleware viene eseguito per primo, così l'handler legge solo ciò che gli serve.

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;

Altri framework

Get started

Pubblica la tua API Hono in ogni lingua

Collega un progetto, aggiungi il middleware e traduci senza toccare la pipeline di deploy.