Repository navigation
fix(i18n): only inline the source locale when it is requested - #200
Merged
Merged
Conversation
Passing -l always made localize-translate overwrite the source folder with an inlined copy. Shared bundles are not rewritten on a watch rebuild, so the next run staged that copy and the target locales got the source-language text.
Aukevanoost
added a commit
that referenced
this pull request
Oct 28, 2026
Backports 22.2.3..22.2.4 onto the Angular 21 layout. Incoming: - #167/#169: the dev server keeps federation externals out of the stylesheet build; Angular's ssr/prerender corrections reach serveWithVite. - #166/#168: context tsconfigs pass `types` resolved instead of widening typeRoots. - #173/#176/#186/#200: i18n translates every federation output, honours outputPath.browser, stays under the Windows command line limit, inlines the source locale only when requested and refreshes integrity hashes. - #187/#190: optional-peer entry points are skipped only when the peer is missing; @angular/localize is an optional peer. - #189/#195/#196: federation build results carry their entry; a path written twice is reported once. - #194: @softarc/native-federation ~4.9.0, orchestrator ^4.9.0. Angular 21 specific adaptations: - Checked the #167/#169 assumptions against @angular/build 21.2.24: serveWithVite reads externalDependencies and ssr back from the options it passed, and the stylesheet bundler uses externalDependencies, as on 22. - No // upstream: tags change (still angular-cli v21.2.19, 1a728258d6). - Skipped #188/#198 (remote builder): this branch has no remote builder. - Kept the internal builder without instrumentForCoverage; dropped it from the incoming spec. - Moved output-entries and the i18n integration spec into src/utils. - Skipped the `types: ["*"]` spec below TypeScript 6 (branch is on 5.9). - @angular/localize optional peer/devDependency at >=21.2.0/^21.2.0. - Kept the -v4 name, 21.2.16 version, ng21 pins and this branch's global pnpm overrides; main's vite 8 override doesn't apply to 21.2's vite 7. - pnpm-lock.yaml regenerated rather than merged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
With a target locale such as
localize: ['de'], a watch rebuild (ng serveorng build --watch) ships source-language text in the target locale.translateFederationArtifactsalways passed-l <source>, solocalize-translatealso wrote an inlined copy of the source locale, which was copied back over the source folder. Core doesn't rewrite shared bundles on a rebuild, so the next run staged those already-inlined files and translated them again. In practice that hits core's$localize.locale:LOCALE_IDfalls back to the source locale after the first edit, and any$localizemessage in a shared package shows the source text.Change
Only pass
-lwhen the source locale is requested (localize: true, or a list that contains it). Without-lthe CLI writes no source copy, so the source folder keeps its raw$localizecalls and every run starts from untranslated input.Not covered
When the source locale is requested together with a target locale (
localize: trueor['en', 'de']underng build --watch), the source folder still has to be inlined in place, sodestill gets the source text after a rebuild. Fixing that needs the adapter to skip files that are unchanged since its last run; that's left for a follow-up.ng serveturnstrueand multi-locale lists off, so it isn't affected.