Etyma 1.0 ya es estable

i18n tipado. SSR real. APIs limpias para Angular.

Etyma ofrece catálogos JSON tipados, MessageFormat 2 con parámetros tipados, URLs localizadas, HTML traducido en SSR y carga lazy de idiomas segura para hidratación, para Angular, AnalogJS y Astro.

pnpm add @etyma/core
Angular
21 y 22
AnalogJS
2.6 y 2.7
Astro
6 y 7
Idiomas
EN / ES / UK
i18n.ts
const i18n = defineRemoteI18n({
  locales: ['en', 'es', 'uk'],
  sourceLocale: 'en',
  contract,
  loaders: {
    en: createHttpMessageLoader(localeUrl),
    es: createHttpMessageLoader(localeUrl),
    uk: createHttpMessageLoader(localeUrl)
  }
});
SSREl HTML localizado sale del servidor antes de iniciar hidratación.
Por qué existe

La capa i18n que una app Angular debería tener por defecto.

Internacionalización tipada para Angular y AnalogJS

Claves y parámetros tipadosEl catálogo fuente define el contrato de claves, y las variables MessageFormat 2 de cada mensaje se vuelven parámetros obligatorios: una variable :number recibe un número, una :datetime una fecha. Los errores fallan en TypeScript, no en la UI.SSR primeroUna URL localizada renderiza HTML localizado en el servidor, transfiere el catálogo e hidrata sin cargar ese idioma otra vez.Lista para edgeLa integración Analog se prueba con un build de Cloudflare Pages para validar el paquete y el runtime real.
Estable desde 1.0

Una promesa sobre la que construir un producto.

Cada export documentado, formato generado, código de diagnóstico y código de salida del CLI mantiene su significado en todas las versiones 1.x. Las novedades llegan como minors, nunca como sorpresas.

API estableLos exports de runtime y los tipos públicos siguen semver en los seis paquetes.Contrato estableUna sola forma generada. Los metadatos nuevos son un campo opcional, nunca un formato nuevo.Diagnósticos establesLos códigos tienen espacio de nombres y no se renombran, eliminan ni cambian de gravedad dentro de una major.CLI estableSalida 0 si todo va bien, 1 si falla la validación o el contrato está obsoleto, 2 por errores de uso o de E/S.
Detectado en el editor

Los errores fallan en TypeScript, no en producción.

Las claves, los nombres de parámetros y sus tipos salen de tu catálogo. Un typo, una variable que falta o un texto donde va un número es un error de compilación, en código y en plantillas de Angular.

const { t } = injectI18n(i18n);

t('home.title');                  // ok
t('home.titel');                  // unknown key
t('footer.rights');               // year required
t('footer.rights', { year: 'x' }); // not a number
t('footer.rights', { year: 2026 });
Cómo funciona

Define una vez. Enruta por URL. Hidrata sin parpadeos.

Etyma mantiene el catálogo fuente tipado, los catálogos secundarios lazy y la página visible alineada con la barra de direcciones.

01Escribe catálogosJSON sigue siendo legible mientras TypeScript usa el idioma fuente como contrato.02Sirve URLs localizadasEl idioma fuente queda limpio y los idiomas secundarios viven bajo prefijos estables.03Transfiere el idioma activoSSR envía el catálogo que usó la página, así la hidratación no lo vuelve a pedir ni muestra inglés.
Tooling

Catálogos y contratos verificados en CI, no en producción.

@etyma/cli valida cada idioma contra el fuente y genera el contrato tipado para una fuente JSON. --check verifica el contrato commiteado sin escribir nada, así un tipo obsoleto nunca llega a main. etyma analyze encuentra claves desconocidas en JS/TS, plantillas Angular y archivos Astro.

# CI: validate Glossa, then build
etyma validate --remote "https://glossa.andersseen.dev/i18n/etyma-www/{locale}.json" \
  --locales en,es,uk --source en
pnpm typecheck && pnpm build
Validar catálogosClaves que faltan o sobran, MessageFormat 2 inválido y variables que no coinciden, en archivos locales o catálogos remotos públicos.Generar el contratoClaves exactas, nombres de variables y funciones MF2, nunca el texto. Determinista, commiteado y legible en la revisión.Verificarlo en CISale con 1 cuando el contrato commiteado falta o está desactualizado, aunque una variable solo haya pasado de :number a :datetime.
Paquetes

Un core portable, adaptadores para tres frameworks y tooling para CI.

@etyma/core gestiona catálogos, MessageFormat 2 y tipos. @etyma/angular, @etyma/analog y @etyma/astro los llevan a cada framework. @etyma/tooling y @etyma/cli mantienen catálogos y contratos correctos.

@etyma/core
@etyma/angular
@etyma/analog
@etyma/astro
@etyma/tooling
@etyma/cli

Publica con tipos, traducido y renderizado en servidor.

Empieza por la documentación o lee el código. Etyma tiene licencia MIT y se desarrolla en abierto.