Skip to content

New build system application missing i18n strings from templates #31227

@Xriuk

Description

@Xriuk

Which @angular/* package(s) are the source of the bug?

compiler-cli

Is this a regression?

No

Description

I have opted in to the new build system, this is my angular.json after the upgrade:

{
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
        "my-lib": {
            "projectType": "application",
            "schematics": {
                "@schematics/angular:component": {
                    "style": "scss"
                },
                "@schematics/angular:application": {
                    "strict": true
                }
            },
            "root": "",
            "sourceRoot": "src",
            "prefix": "app",
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:application",
                    "options": {
                        "outputPath": {
                          "base": "dist/my-lib"
                        },
						"i18nMissingTranslation": "ignore",
                        "deleteOutputPath": true,
                        "index": "src/index.html",
                        "polyfills": [
							"@angular/localize/init",
                          	"src/polyfills.ts"
                        ],
                        "tsConfig": "tsconfig.app.json",
                        "inlineStyleLanguage": "scss",
                        "assets": [
                            "src/favicon.ico",
                            "src/assets"
                        ],
                        "styles": [
                            "src/styles.scss"
                        ],
                        "scripts": [
                            "./node_modules/quill/dist/quill.min.js"
                        ],
                        "stylePreprocessorOptions": {
                            "includePaths": [
                                "node_modules",
                                "src/app"
                            ]
                        },
                        "allowedCommonJsDependencies": [
                            "@uppy/core",
                            "@uppy/tus",
                            "url-parse",
                            "lodash",
                            "namespace-emitter",
                            "classnames",
                            "is-shallow-equal",
                            "cropperjs",
                            "quill",
                            "ts-deepmerge"
                        ],
                        "browser": "src/main.ts"
                    },
                    "configurations": {
                        "production": {
                            "fileReplacements": [
                                {
                                    "replace": "src/environments/environment.ts",
                                    "with": "src/environments/environment.prod.ts"
                                }
                            ],
                            "outputHashing": "all"
                        },
                        "development": {
                            "aot": false,
                            "optimization": false,
                            "extractLicenses": false,
                            "sourceMap": true,
                            "namedChunks": true
                        }
                    },
                    "defaultConfiguration": "development"
                },
                "serve": {
                    "builder": "@angular-devkit/build-angular:dev-server",
                    "configurations": {
                        "production": {
                          "buildTarget": "my-lib:build:production"
                        },
                        "development": {
                          "buildTarget": "my-lib:build:development"
                        }
                    },
                    "defaultConfiguration": "development",
                    "options": {
                        "sslCert": "./node_modules/browser-sync/certs/server.crt",
                        "sslKey": "./node_modules/browser-sync/certs/server.key",
                        "ssl": true,
                        "liveReload": false
                    }
                },
                "extract-i18n": {
                    "builder": "@angular-devkit/build-angular:extract-i18n",
                    "options": {
                      "buildTarget": "my-lib:build"
                    }
                },
                "test": {
                    "builder": "@angular-devkit/build-angular:karma",
                    "options": {
                        "main": "src/test/test.ts",
                        "tsConfig": "tsconfig.spec.json",
                        "karmaConfig": "karma.conf.js",
                        "styles": [
                            "src/styles.scss"
                        ],
                        "stylePreprocessorOptions": {
                            "includePaths": [
                                "node_modules",
                                "src/app"
                            ]
                        }
                    }
                }
            }
        }
    },
    "cli": {
        "analytics": false
    }
}

The project is serving and building but when I try to extract the translation strings with:

ng extract-i18n --format=json

At the end I get:

Extraction Complete. (Messages: 713)

In fact with my previous setup:

{
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
        "my-lib": {
            "projectType": "application",
            "schematics": {
                "@schematics/angular:component": {
                    "style": "scss"
                },
                "@schematics/angular:application": {
                    "strict": true
                }
            },
            "root": "",
            "sourceRoot": "src",
            "prefix": "app",
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:browser",
                    "options": {
                        "outputPath": "dist/my-lib",
						"i18nMissingTranslation": "ignore",
                        "deleteOutputPath": true,
                        "index": "src/index.html",
                        "main": "src/main.ts",
                        "polyfills": "src/polyfills.ts",
                        "tsConfig": "tsconfig.app.json",
                        "inlineStyleLanguage": "scss",
                        "assets": [
                            "src/favicon.ico",
                            "src/assets"
                        ],
                        "styles": [
                            "src/styles.scss"
                        ],
                        "scripts": [
                            "./node_modules/quill/dist/quill.min.js"
                        ],
                        "stylePreprocessorOptions": {
                            "includePaths": [
                                "node_modules",
                                "src/app"
                            ]
                        },
                        "allowedCommonJsDependencies": [
                            "@uppy/core",
                            "@uppy/tus",
                            "url-parse",
                            "lodash",
                            "namespace-emitter",
                            "classnames",
                            "is-shallow-equal",
                            "cropperjs",
                            "quill",
                            "ts-deepmerge"
                        ]
                    },
                    "configurations": {
                        "production": {
                            "fileReplacements": [
                                {
                                    "replace": "src/environments/environment.ts",
                                    "with": "src/environments/environment.prod.ts"
                                }
                            ],
                            "outputHashing": "all"
                        },
                        "development": {
                            "aot": false,
							"buildOptimizer": false,
                            "optimization": false,
							"vendorChunk": true,
                            "extractLicenses": false,
                            "sourceMap": true,
                            "namedChunks": true
                        }
                    },
                    "defaultConfiguration": "development"
                },
                "serve": {
                    "builder": "@angular-devkit/build-angular:dev-server",
                    "configurations": {
                        "production": {
                          "buildTarget": "my-lib:build:production"
                        },
                        "development": {
                          "buildTarget": "my-lib:build:development"
                        }
                    },
                    "defaultConfiguration": "development",
                    "options": {
                        "sslCert": "./node_modules/browser-sync/certs/server.crt",
                        "sslKey": "./node_modules/browser-sync/certs/server.key",
                        "ssl": true,
                        "liveReload": false
                    }
                },
                "extract-i18n": {
                    "builder": "@angular-devkit/build-angular:extract-i18n",
                    "options": {
                      "buildTarget": "my-lib:build"
                    }
                },
                "test": {
                    "builder": "@angular-devkit/build-angular:karma",
                    "options": {
                        "main": "src/test/test.ts",
                        "tsConfig": "tsconfig.spec.json",
                        "karmaConfig": "karma.conf.js",
                        "styles": [
                            "src/styles.scss"
                        ],
                        "stylePreprocessorOptions": {
                            "includePaths": [
                                "node_modules",
                                "src/app"
                            ]
                        }
                    }
                }
            }
        }
    },
    "cli": {
        "analytics": false
    }
}

The same i18n extraction command gets me:

Extraction Complete. (Messages: 1602)

I notices that with the application builder translations are missing from the component html templates, while $localization used inside TS files are recognized.

Please provide a link to a minimal reproduction of the bug

No response

Please provide the exception or error you saw


Please provide the environment you discovered this bug in (run ng version)

Angular CLI: 20.3.1
Node: 20.19.5

Anything else?

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions