@routup/i18n
Adds locale detection and translation to the routup pipeline. Built on ilingo — bring any Store (memory, filesystem, async loader, …) and the plugin handles per-request locale resolution and the translator factory.
Installation
bash
npm install @routup/i18n ilingoQuick start
typescript
import { Router, defineCoreHandler, serve } from 'routup';
import { MemoryStore } from 'ilingo';
import { i18n, useTranslator } from '@routup/i18n';
const store = new MemoryStore({
data: {
en: { app: { greeting: 'Hello, my name is {{name}}' } },
de: { app: { greeting: 'Hallo, mein Name ist {{name}}' } },
},
});
const router = new Router();
router.use(i18n({ store }));
router.get('/', defineCoreHandler((event) => {
const t = useTranslator(event);
return t({ group: 'app', key: 'greeting', data: { name: 'Peter' } });
}));
serve(router, { port: 3000 });The middleware inspects each incoming request and selects a locale (defaulting to ilingo's resolver — typically Accept-Language or a configured query/cookie strategy). useTranslator(event) returns a translator pre-bound to that locale.
When to use it
- Multi-language API responses, error messages, or email bodies rendered server-side
- Centralizing translation files under one
Storeshared across the request pipeline - Reusing existing ilingo stores (memory, filesystem, custom async loader)
Helpers
useTranslator
Returns a translator bound to the request's resolved locale.
typescript
import type { IRoutupEvent } from 'routup';
import type { Translator } from '@routup/i18n';
declare function useTranslator(event: IRoutupEvent): Translator;typescript
const t = useTranslator(event);
const greeting = t({ group: 'app', key: 'greeting', data: { name: 'Peter' } });For ilingo's Translator API (interpolation, fallback chains, plurals), see the ilingo documentation.