Aller au contenu
Hono

Hono i18n

Un middleware détecte la langue de la requête et fournit un traducteur à chaque handler de route. Les messages viennent du CDN : les nouveaux textes partent sans redéploiement.

Setup

Configurer Hono avec Better I18N

Installer les paquets

Ajoutez Hono et l'adaptateur serveur. Rien d'autre n'est nécessaire.

terminal
npm install hono @better-i18n/server

Créer le singleton i18n

Créez-le une seule fois au niveau du module : le cache de messages est partagé par toutes les requêtes.

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

Monter le middleware

Après app.use, chaque handler peut lire locale et t depuis le contexte.

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

Pourquoi les équipes Hono choisissent Better I18N

Une ligne de configuration : app.use('*', betterI18n(i18n))
Conçu sur les standards du web : les en-têtes de requête sont lus directement, sans couche d'adaptation
Fonctionne partout où Hono fonctionne : Cloudflare Workers, Bun, Deno et Node
Une instance au niveau du module partage son cache de messages entre les requêtes
Les nouveaux messages arrivent du CDN en 60 secondes environ, sans redéploiement
Variables de contexte typées pour locale et t
Example

Une route Hono localisée

Le middleware s'exécute en premier : le handler ne lit que ce dont il a besoin.

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;

Autres frameworks

Get started

Déployez votre API Hono dans toutes les langues

Connectez un projet, ajoutez le middleware et traduisez sans toucher au pipeline de déploiement.