Reputation: 885
I am working on an Angular 19 project, and I'm trying to add internationalization (i18n) features to support multiple languages. I've followed several guides and suggestions, but I keep running into issues.
Here are the steps I've taken so far:
Installed the necessary package:
npm install @angular/localize --legacy-peer-deps
Updated my tsconfig.json:
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"skipLibCheck": true,
"isolatedModules": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"moduleResolution": "bundler",
"importHelpers": true,
"target": "ES2022",
"module": "ES2022"
},
"files": [
"node_modules/@angular/localize/init"
],
"angularCompilerOptions": {
"enableIvy": true,
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true
}
}
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"YourProjectName": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/your-project-name",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": [
"zone.js"
],
"tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "scss",
"assets": [
"src/favicon.ico",
"src/assets",
{
"glob": "**/*",
"input": "public"
}
],
"styles": [
"@angular/material/prebuilt-themes/azure-blue.css",
"src/styles.scss"
],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kB",
"maximumError": "1MB"
},
{
"type": "anyComponentStyle",
"maximumWarning": "4kB",
"maximumError": "8kB"
}
],
"outputHashing": "all"
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
},
"en": {
"localize": ["en"],
"i18nFile": "src/locale/messages.xlf",
"i18nLocale": "en",
"outputPath": "dist/your-project-name/en",
"aot": true,
"buildOptimizer": true
},
"fr": {
"localize": ["fr"],
"i18nFile": "src/locale/messages.fr.xlf",
"i18nLocale": "fr",
"outputPath": "dist/your-project-name/fr",
"aot": true,
"buildOptimizer": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"port": 4200,
"browserTarget": "YourProjectName:build:development"
},
"configurations": {
"production": {
"browserTarget": "YourProjectName:build:production"
},
"en": {
"browserTarget": "YourProjectName:build:en"
},
"fr": {
"browserTarget": "YourProjectName:build:fr"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "YourProjectName:build"
}
}
}
}
}
}
Issues Encountered:
When trying to serve the application for specific locales using:
ng serve --configuration=fr
ng serve --configuration=en
I encounter the following error:
Error: Schema validation failed with the following errors:
Data path "" must have required property 'buildTarget'.
/Users/ali/angular-applications/YourProjectName/node_modules/rxjs/dist/cjs/internal/util/reportUnhandledError.js:13
throw err;
^
SchemaValidationException [Error]: Schema validation failed with the following errors:
Data path "" must have required property 'buildTarget'.
at /Users/ali/angular-applications/YourProjectName/node_modules/@angular-devkit/architect/src/architect.js:38:27 {
errors: [
{
instancePath: '',
schemaPath: '#/required',
keyword: 'required',
params: { missingProperty: 'buildTarget' },
message: "must have required property 'buildTarget'"
}
]
}
Questions:
How can I properly configure angular.json to support multiple locales without encountering the buildTarget error?
Are there any other steps I might have missed in setting up Angular i18n?
Any help or guidance would be greatly appreciated!
Thank you in advance!
Upvotes: 2
Views: 861
Reputation: 57986
Could you replace all instance of browserTarget
to buildTarget
.
Below is a sample angular.json
(ssr enabled) for reference:
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"test": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"outputPath": "dist/test",
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": [
"zone.js"
],
"tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "scss",
"assets": [
{
"glob": "**/*",
"input": "public"
}
],
"styles": [
"src/styles.scss"
],
"scripts": [],
"server": "src/main.server.ts",
"prerender": true,
"ssr": {
"entry": "src/server.ts"
}
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kB",
"maximumError": "1MB"
},
{
"type": "anyComponentStyle",
"maximumWarning": "4kB",
"maximumError": "8kB"
}
],
"outputHashing": "all"
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"buildTarget": "test:build:production"
},
"development": {
"buildTarget": "test:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n"
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": [
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json",
"inlineStyleLanguage": "scss",
"assets": [
{
"glob": "**/*",
"input": "public"
}
],
"styles": [
"src/styles.scss"
],
"scripts": []
}
}
}
}
}
}
Upvotes: 0