2.9 KiB
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:
plukruhu
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.