angular-cn/integration/ivy-i18n/e2e
Pete Bacon Darwin 72f534f7f8 feat(localize): support merging multiple translation files (#36792)
Previously only one translation file per locale could be loaded.

Now the user can specify multiple files per locale, and the translations
from each of these files will be merged together by message id.
The merging is on a first-wins approach. So if to you have three files
to be merged:

```
['a.xlf', 'b.xmb', 'c.json']
```

Then any message from `a.xlf` will be used rather than a message from `b.xmb`
or `c.json` and so on. In practice this means that you should put the files
in order of most important first, with "fallback" translations later.

PR Close #36792
2020-05-01 09:46:12 -07:00
..
de feat(localize): support merging multiple translation files (#36792) 2020-05-01 09:46:12 -07:00
en feat(localize): support merging multiple translation files (#36792) 2020-05-01 09:46:12 -07:00
fr feat(localize): support merging multiple translation files (#36792) 2020-05-01 09:46:12 -07:00
legacy test: rename cli-hello-world-ivy-i18n to just ivy-i18n (#33510) 2019-11-01 17:50:56 +00:00
runtime test: rename cli-hello-world-ivy-i18n to just ivy-i18n (#33510) 2019-11-01 17:50:56 +00:00
README.md test: rename cli-hello-world-ivy-i18n to just ivy-i18n (#33510) 2019-11-01 17:50:56 +00:00
app.po.ts test: rename cli-hello-world-ivy-i18n to just ivy-i18n (#33510) 2019-11-01 17:50:56 +00:00
protractor.conf.js test: use puppeteer in integration tests and to download correct chromedriver (#35049) 2020-02-11 13:16:52 -08:00
tsconfig.json test: rename cli-hello-world-ivy-i18n to just ivy-i18n (#33510) 2019-11-01 17:50:56 +00:00

README.md

E2E tests

There are four different sets of e2e tests in this folder. They are all testing different translation scenarios, but they are all built with IVY enabled.

runtime

A new polyfills.ts file is provided (polyfills-runtime.ts) which is swapped in by a file replacement in the angular.json configuration. In this new file:

  • Runtime translations are provided (loadTranslations()).
  • The current locale is set ($localize.locale = 'fr') and loaded (registerLocaleData(localeFr);)

de and fr

The application is built (into the dist folder) and then two sets of translations (src/locales/messages.(de|fr).json) are used to generate two copies of the app, which have been translated (compile-time inlined).

These translated apps are stored in tmp/translations/(de|fr).

legacy

The legacy ng xi18n tool extracts the messages from the Angular templates, into the XLIFF 1.2 format with legacy message ids (tmp/legacy-locales/messages.legacy.xlf).

The translation file is modified to apply a simple translation.

The app must be compiled using the i18nLegacyMessageIdFormat option set to ensure that the correct message ids are used to match those in the translation files.

The app is translated using the compile-time inlining tool to generate a copy that has the translated message in it.

Hosting

Since the CLI hosts from and in-memory file-system the compile-time inliner is not able to translate the output files. So the de, fr and legacy apps must be statically built to disk and translated there.

Since the translated app is now on disk, we cannot use the CLI to serve it. Instead we use a simple static HTTP server instead.