Etyma 1.0 стабільна

Типізована i18n. Справжній SSR. Чисті Angular API.

Etyma дає командам Angular, AnalogJS і Astro типізовані JSON-каталоги, MessageFormat 2 з типізованими параметрами, локалізовані URL, перекладений SSR HTML і lazy-завантаження мов без проблем гідратації.

pnpm add @etyma/core
Angular
21 і 22
AnalogJS
2.6 і 2.7
Astro
6 і 7
Мови
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)
  }
});
SSRЛокалізований HTML виходить із сервера ще до старту гідратації.
Навіщо це

i18n-шар, який Angular apps мали б мати за замовчуванням.

Типізована інтернаціоналізація для Angular і AnalogJS

Типізовані ключі й параметриДжерельний каталог визначає контракт ключів, а змінні MessageFormat 2 кожного повідомлення стають обов’язковими параметрами: змінна :number приймає число, :datetime — дату. Помилки падають у TypeScript, а не в UI.SSR передусімЛокалізована URL-адреса рендерить локалізований HTML на сервері, передає каталог і гідратується без повторного завантаження мови.Готово для edgeІнтеграція Analog перевіряється через build Cloudflare Pages, щоб пакет і runtime залишалися чесними.
Стабільно з 1.0

Обіцянка, на якій можна будувати продукт.

Кожен задокументований експорт, згенерований формат, код діагностики та код виходу CLI зберігає своє значення в усіх випусках 1.x. Нові можливості приходять у minor-версіях, а не як сюрпризи.

Стабільний APIRuntime-експорти й публічні типи дотримуються semver в усіх шести пакетах.Стабільний контрактОдна згенерована форма. Нові метадані — це нове необов’язкове поле, а не новий формат.Стабільна діагностикаКоди мають простір імен і не перейменовуються, не видаляються й не змінюють серйозність у межах major.Стабільний CLIКод 0 — успіх, 1 — помилка валідації або застарілий контракт, 2 — помилки використання чи вводу-виводу.
Помічено в редакторі

Помилки падають у TypeScript, а не в продакшені.

Ключі, назви параметрів і їхні типи беруться з вашого каталогу. Одруківка, відсутня змінна чи рядок замість числа — це помилка компіляції, і в коді, і в шаблонах 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 });
Як це працює

Визнач один раз. Роуть через URL. Гідратуй без миготіння.

Etyma тримає джерельний каталог типізованим, додаткові каталоги lazy, а сторінку синхронною з адресним рядком.

01Створи каталогиJSON лишається читабельним, а TypeScript використовує джерельну мову як контракт.02Віддавай локалізовані URLДжерельна мова лишається чистою, а додаткові мови живуть під стабільними префіксами.03Передай активну мовуSSR віддає каталог, який використала сторінка, тому гідратація не просить його знову й не показує англійську.
Інструменти

Каталоги й контракти перевіряються в CI, а не в production.

@etyma/cli перевіряє кожну мову відносно джерельної й генерує типізований контракт для JSON-джерела. --check перевіряє закомічений контракт, нічого не записуючи, тож застарілий тип ніколи не потрапить у main. etyma analyze знаходить невідомі ключі в JS/TS, шаблонах Angular і файлах 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
Перевірка каталогівВідсутні й зайві ключі, некоректний MessageFormat 2 і розбіжності змінних — для локальних файлів або публічних віддалених каталогів.Генерація контрактуТочні ключі, назви змінних і функції MF2 — ніколи не текст повідомлень. Детермінований, закомічений, зрозумілий у рев’ю.Перевірка в CIКод виходу 1, коли закомічений контракт відсутній або застарів, навіть якщо змінна лише змінилася з :number на :datetime.
Пакети

Один portable core, адаптери для трьох фреймворків і інструменти для CI.

@etyma/core відповідає за каталоги, MessageFormat 2 і типи. @etyma/angular, @etyma/analog і @etyma/astro приносять їх у кожен фреймворк. @etyma/tooling і @etyma/cli тримають каталоги й контракти коректними.

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

Випускайте з типами, перекладом і серверним рендерингом.

Почніть із документації або прочитайте код. Etyma має ліцензію MIT і розробляється відкрито.