From 0f1c910919fb87f3686222d7d1b04cce4b32ea8a Mon Sep 17 00:00:00 2001 From: ewandor Date: Thu, 9 Mar 2023 15:51:00 +0100 Subject: [PATCH] First round of internationlization --- front/app/angular.json | 25 +- front/app/package-lock.json | 85 ++++- front/app/package.json | 1 + .../app/src/app/layout/auth/auth.component.ts | 15 +- .../app/layout/sidenav/sidenav.component.ts | 12 +- .../src/common/crud/card/card.component.html | 28 +- .../src/common/crud/card/card.component.ts | 42 +- .../src/common/crud/list/list.component.html | 17 +- front/app/src/locale/messages.fr.xlf | 358 ++++++++++++++++++ front/app/src/locale/messages.xlf | 296 +++++++++++++++ 10 files changed, 817 insertions(+), 62 deletions(-) create mode 100644 front/app/src/locale/messages.fr.xlf create mode 100644 front/app/src/locale/messages.xlf diff --git a/front/app/angular.json b/front/app/angular.json index 3a018008..2f55e6a3 100644 --- a/front/app/angular.json +++ b/front/app/angular.json @@ -9,10 +9,20 @@ "root": "", "sourceRoot": "src", "prefix": "app", + "i18n": { + "sourceLocale": "en-US", + "locales": { + "fr": { + "translation": "src/locale/messages.fr.xlf" + } + } + }, "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { + "localize": ["fr"], + "i18nMissingTranslation": "warning", "outputPath": "dist/app", "index": "src/index.html", "main": "src/main.ts", @@ -53,6 +63,9 @@ "extractLicenses": false, "sourceMap": true, "namedChunks": true + }, + "fr": { + "localize": ["fr"] } }, "defaultConfiguration": "production" @@ -65,14 +78,22 @@ }, "development": { "browserTarget": "app:build:development" + }, + "fr": { + "browserTarget": "App:build:fr" } }, "defaultConfiguration": "development" }, "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", + "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge", "options": { - "browserTarget": "app:build" + "browserTarget": "app:build", + "format": "xlf2", + "outputPath": "src/locale", + "targetFiles": [ + "messages.fr.xlf" + ] } }, "test": { diff --git a/front/app/package-lock.json b/front/app/package-lock.json index a6648287..7810da01 100644 --- a/front/app/package-lock.json +++ b/front/app/package-lock.json @@ -43,6 +43,7 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", + "ng-extract-i18n-merge": "^2.5.1", "typescript": "~4.8.2" } }, @@ -7410,6 +7411,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8740,6 +8750,24 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/ng-extract-i18n-merge": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.5.1.tgz", + "integrity": "sha512-wHZR58H74nhgNKr33CtcawIUXWZrfvB2oKaF2VpoLxZMK3wJuBWXqnGwUGkZ5GJcYxiy21NFPMiQnkbw8pxS/A==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0", + "@angular-devkit/core": "^13.0.0 || ^14.0.0 || ^15.0.0", + "@angular-devkit/schematics": "^13.0.0 || ^14.0.0 || ^15.0.0", + "@schematics/angular": "^13.0.0 || ^14.0.0 || ^15.0.0", + "xliff-simple-merge": "~1.0.1", + "xml_normalize": "^1.0.0", + "xmldoc": "~1.1.2" + }, + "peerDependencies": { + "@angular-devkit/build-angular": "^13.0.0 || ^14.0.0 || ^15.0.0" + } + }, "node_modules/ngx-bootstrap-icons": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ngx-bootstrap-icons/-/ngx-bootstrap-icons-1.9.1.tgz", @@ -10659,8 +10687,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true + "dev": true }, "node_modules/saxes": { "version": "5.0.1", @@ -12455,6 +12482,51 @@ } } }, + "node_modules/xliff-simple-merge": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xliff-simple-merge/-/xliff-simple-merge-1.0.2.tgz", + "integrity": "sha512-9Dtw/l91o0DeLkNFJrlh5nxJSS8OD+IHeq5rjA6hkVtv6SWf7rJyr4YNSQc/6opDssRI8JgAWcQlj2ZfcvW11Q==", + "dev": true, + "dependencies": { + "commander": "~8.3.0", + "js-levenshtein": "~1.1.6", + "xmldoc": "~1.1.2" + }, + "bin": { + "xliff-simple-merge": "dist/src/index.js" + } + }, + "node_modules/xliff-simple-merge/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/xml_normalize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml_normalize/-/xml_normalize-1.0.0.tgz", + "integrity": "sha512-VzDbw9DW849WoLor6CP1eIPiVWwbq8CV3dlSrfVfsMqBqvp3VVkmLxA8J55WyLf6CnAf2sV29TQO77BKM/cxBw==", + "dev": true, + "dependencies": { + "commander": "~7.1.0", + "xmldoc": "~1.1.2" + }, + "bin": { + "xml_normalize": "dist/src/index.js" + } + }, + "node_modules/xml_normalize/node_modules/commander": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", + "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -12470,6 +12542,15 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "optional": true }, + "node_modules/xmldoc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.4.tgz", + "integrity": "sha512-rQshsBGR5s7pUNENTEncpI2LTCuzicri0DyE4SCV5XmS0q81JS8j1iPijP0Q5c4WLGbKh3W92hlOwY6N9ssW1w==", + "dev": true, + "dependencies": { + "sax": "^1.2.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/front/app/package.json b/front/app/package.json index 584b30d3..079f418e 100644 --- a/front/app/package.json +++ b/front/app/package.json @@ -45,6 +45,7 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", + "ng-extract-i18n-merge": "^2.5.1", "typescript": "~4.8.2" } } diff --git a/front/app/src/app/layout/auth/auth.component.ts b/front/app/src/app/layout/auth/auth.component.ts index ab9e3154..734f998e 100644 --- a/front/app/src/app/layout/auth/auth.component.ts +++ b/front/app/src/app/layout/auth/auth.component.ts @@ -10,23 +10,22 @@ import {NgbModal} from "@ng-bootstrap/ng-bootstrap"; + >Login