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/serverCrea 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.