Angular i18n
Angular’s built-in i18n system marks translatable strings in templates, extracts them to XLIFF files, and compiles separate builds per locale.
Mark Strings in Templates
Section titled “Mark Strings in Templates”<!-- Static text --><h1 i18n="@@app.title">Album Store</h1>
<!-- With meaning and description --><p i18n="Page heading|Shown on the homepage@@home.heading"> Welcome to the store</p>
<!-- Attribute --><input i18n-placeholder="@@search.placeholder" placeholder="Search…" />
<!-- Named ID (@@id makes re-extraction stable) --><button i18n="@@cart.add">Add to cart</button>Extract Messages
Section titled “Extract Messages”ng extract-i18n --format xlf2 --output-path src/localeGenerated src/locale/messages.xlf:
<xliff version="2.0" xmlns="urn:oasis:names:tc:xliff:document:2.0" srcLang="en-US"> <file id="ngi18n" original="ng:localize"> <unit id="app.title"> <segment> <source>Album Store</source> </segment> </unit> </file></xliff>Translate (French)
Section titled “Translate (French)”Copy and rename:
cp src/locale/messages.xlf src/locale/messages.fr.xlfAdd <target> inside each <segment>:
<unit id="app.title"> <segment> <source>Album Store</source> <target>Boutique d'Albums</target> </segment></unit>Plural and Select
Section titled “Plural and Select”<!-- Plural --><p i18n="@@cart.items"> {itemCount, plural, =0 {No items} =1 {1 item} other {{{itemCount}} items} }</p>
<!-- Select --><span i18n="@@format.type"> {format, select, vinyl {Vinyl} cd {CD} other {Digital} }</span>French translation for plural:
<unit id="cart.items"> <segment> <source>{itemCount, plural, =0 {No items} =1 {1 item} other {{{itemCount}} items}}</source> <target>{itemCount, plural, =0 {Aucun article} =1 {1 article} other {{{itemCount}} articles}}</target> </segment></unit>Configure angular.json
Section titled “Configure angular.json”{ "projects": { "my-app": { "i18n": { "sourceLocale": "en-US", "locales": { "fr": { "translation": "src/locale/messages.fr.xlf" } } }, "architect": { "build": { "configurations": { "fr": { "localize": ["fr"] }, "production": { "localize": true } } } } } }}Build Localized Bundles
Section titled “Build Localized Bundles”# All localesng build --localize
# Single localeng build --configuration=frOutput:
dist/my-app/browser/├── en-US/└── fr/Serve in Development (Single Locale)
Section titled “Serve in Development (Single Locale)”ng serve --configuration=frKey Points
Section titled “Key Points”| Concept | Details |
|---|---|
i18n attribute |
Marks element content for translation |
i18n-{attr} |
Marks an HTML attribute |
@@id |
Stable translation unit ID (recommended) |
| XLIFF format | XLF or XLF2 (prefer XLF2) |
ng extract-i18n |
Generates the source message file |
ng build --localize |
Compiles one bundle per locale |

