Ir al contenido
Hono

Hono i18n

Un middleware detecta el idioma de la solicitud y entrega un traductor a cada handler de ruta. Los mensajes llegan desde la CDN, así que los textos nuevos se publican sin volver a desplegar.

Setup

Configura Hono con Better I18N

Instala los paquetes

Añade Hono y el adaptador de servidor. No hace falta nada más.

terminal
npm install hono @better-i18n/server

Crea el singleton de i18n

Créalo una sola vez en el ámbito del módulo: la caché de mensajes se comparte entre todas las solicitudes.

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 el middleware

Después de app.use, cada handler puede leer locale y t desde el contexto.

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

Por qué los equipos de Hono eligen Better I18N

Una línea de configuración: app.use('*', betterI18n(i18n))
Construido sobre estándares web: las cabeceras de la solicitud se leen directamente, sin capa de adaptador
Funciona donde funcione Hono: Cloudflare Workers, Bun, Deno y Node
Una instancia en el ámbito del módulo comparte su caché de mensajes entre solicitudes
Los mensajes nuevos llegan desde la CDN en unos 60 segundos, sin volver a desplegar
Variables de contexto tipadas para locale y t
Example

Una ruta de Hono localizada

El middleware se ejecuta primero, así que el handler solo lee lo que necesita.

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;

Otros frameworks

Get started

Lanza tu API de Hono en todos los idiomas

Conecta un proyecto, añade el middleware y traduce sin tocar el pipeline de despliegue.