37 lines
2.9 KiB
Markdown
37 lines
2.9 KiB
Markdown
# Six-locale rollout and rollback
|
|
|
|
Polish (`pl`), Ukrainian (`uk`), Russian (`ru`) and Hungarian (`hu`) ship as static catalogs but remain disabled until their own release gate passes. The checked-in and production default for `I18N_ENABLED_LOCALES` is `de,en`.
|
|
|
|
## Release gate
|
|
|
|
Each locale must have a current `reviews/<locale>.json` manifest before activation. A native speaker reviews all Auth, error, billing, transactional-mail and formal-override copy, completes the critical App and Customer Portal journeys, and records at least 200 stratified samples from the other namespaces. The manifest records reviewer, date, sample size and corrections. A changed German source hash makes the catalog review-pending again.
|
|
|
|
Technical presence is not release approval. `packages/i18n/src/locales.ts` keeps every new locale in the `review` stage, so production configuration rejects it even if it is added to the environment variable. The stage may move to `production` only after the manifest gate has passed.
|
|
|
|
## Staged activation
|
|
|
|
Activate one locale at a time on staging in this order:
|
|
|
|
1. `pl`
|
|
2. `uk`
|
|
3. `ru`
|
|
4. `hu`
|
|
|
|
For each locale, append only that code to `I18N_ENABLED_LOCALES`, deploy the same immutable image, and run the Du/Sie browser and mail UAT. Cover login/password reset, navigation/dashboard/search, CRM/projects/pipelines/workflows, destructive dialogs/errors/toasts, billing/checkout, settings/language changes, Customer Portal and transactional mail. Check desktop, tablet and mobile layouts, including Cyrillic, Polish `ą ć ę ł ń ó ś ź ż` and Hungarian `á é í ó ö ő ú ü ű`.
|
|
|
|
After corrections and a completed manifest, promote the locale release stage, add it to the production environment variable and monitor the deploy. Do not activate multiple new locales in the same rollout step.
|
|
|
|
## Performance gate
|
|
|
|
Run `pnpm verify:i18n-performance`. It measures synchronous JSON parsing and retained RSS for `de,en` versus all six base/formal bundles in isolated Node processes. A delta above 250 ms or 30 MB fails the command and requires locale-scoped cached loading before release. Record the measured result in the ticket implementation note.
|
|
|
|
Measurement on 2026-08-02: the median `de,en` load was 11.29 ms and 5.30 MB retained RSS; all six locales loaded in 33.17 ms and 16.59 MB. The resulting delta was **+21.88 ms and +11.29 MB**, so eager once-per-process loading remains within the release contract.
|
|
|
|
## Rollback
|
|
|
|
Remove the affected locale from `I18N_ENABLED_LOCALES`, redeploy, and if needed redeploy the previous immutable image SHA. Catalog files may remain in the image: disabled locales cannot be selected or activated through a stored preference, cookie, request parameter or `Accept-Language` header. No database rollback is required.
|
|
|
|
## Next candidates
|
|
|
|
Romanian is the next planned expansion, but this change intentionally adds no `ro` type, catalog or runtime option. Turkish and Bulgarian remain later market candidates only.
|