Angular
Angular · @angular/localize · ICU · 46 languages · Free

Translate $localize strings, then read every line back before you ship

Angular's extractor speaks XLIFF by default — KAERIS reads your ng extract-i18n XLIFF (or --format json), translates all 46 languages, then reads each string back to you in your own language and flags the ones worth a second look. {count, plural, ...}/{gender, select, ...} blocks stay intact for ng build --localize.

Translate your messages file $ pip install kaeris
ICU plural/select preserved Reads ng extract-i18n XLIFF (or JSON) directly Custom @@id-friendly keys ng build --localize ready No account needed
Localize your Angular app in 3 steps
1

Extract

ng extract-i18n — KAERIS reads the XLIFF 1.2 it emits directly, or point it at --format json if you prefer.

2

Translate

Upload the file, or run kaeris translate src/locale/messages.json --langs de,fr,ja --icu.

3

Ship

Save each output as messages.de.json, wire it into angular.json's i18n.locales, and ng build --localize.

ICU translated per-branch, per-locale plural rules

Before → after

app.component.html
<p i18n="@@welcome">Welcome back, {{ name }}!</p>
<p i18n="@@cartCount">
  {count, plural, =0 {Your cart is empty} one {# item} other {# items}}
</p>
src/locale/messages.de.json
{
  "welcome": "Willkommen zurück, {{ name }}!",
  "cartCount": "{count, plural, =0 {Dein Warenkorb ist leer} one {# Artikel} other {# Artikel}}"
}

KAERIS translates a flat JSON id→string map, exactly what --format json extraction produces — ICU plural/select blocks are preserved verbatim and translated as one unit; turn on Smart plurals and the model fills in the CLDR categories the locale needs, same treatment as next-intl and Flutter's ARB. Angular wraps the real file in a { "locale", "translations" } envelope with hashed message ids unless you set @@ids — keep your own ids, translate the inner map, then drop it back into that envelope per locale.

Built for @angular/localize

ICU-aware

plural, select and selectordinal blocks are preserved verbatim and translated as one unit — never string-mangled.

Reads Angular XLIFF directly

Angular's default extractor output is XLIFF 1.2 — KAERIS reads ng extract-i18n XLIFF natively (or --format json if you prefer), inline <x/> tags preserved.

Custom @@id friendly

Set i18n="@@welcome" in your templates for readable keys instead of Angular's default content-hash ids.

One CLI command

kaeris translate src/locale/messages.json --langs de,fr,ja --icu — run it right after ng extract-i18n in CI.

Why KAERIS
ICU-safe — plural/select blocks are never flattened or string-mangled.
Format-native — reads Angular XLIFF or JSON, ICU intact, no manual conversion.
Verify-meaning QA — every string is back-translated to catch meaning drift before you ship.
No account needed — drag & drop free up to 10,000 characters, or use the CLI/API.
Honest flat pricing — no per-seat, no per-language multiplier. See plans

Ship Angular in every market

46 languages, ICU-safe, JSON-native. Free to start, no account required.

$ pip install kaeris
$ kaeris translate src/locale/messages.json --langs de,fr,ja --icu
Translate your messages files now