From 1f01668a52d41f9dceeefaf4386a04393a33e800 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 6 Jun 2025 07:38:54 +0200 Subject: [PATCH 1/2] Feature/upgrade ng-extract-i18n-merge to version 2.15.1 (#4838) * Upgrade ng-extract-i18n-merge to version 2.15.1 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 18 +++++++++--------- package.json | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b75b5f393..d53d2290c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Upgraded `ng-extract-i18n-merge` from version `2.15.0` to `2.15.1` - Upgraded `Nx` from version `20.8.1` to `21.1.2` ### Fixed diff --git a/package-lock.json b/package-lock.json index 18360e2f2..1dd611787 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "2.15.0", + "ng-extract-i18n-merge": "2.15.1", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", "ngx-skeleton-loader": "11.0.0", @@ -26654,22 +26654,22 @@ "license": "MIT" }, "node_modules/ng-extract-i18n-merge": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.15.0.tgz", - "integrity": "sha512-43ew7btSrRJ34BHfRkjvvW8wXxfyFiM5rbFU22f/ZuEK1wpClV8lNaF09CYixY1+ycMpKLLyW+olj1Nj3kvs4g==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.15.1.tgz", + "integrity": "sha512-vNr+sVySO13imQ1Y7Jwe3JtGKP4Hck4Gzb7i4HxOq9fDLDORDIoazLTiwmZVoW4ZAyqK7kkDavjS0XD+VSMZUA==", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0 || ^0.1601.0 || ^0.1700.0 || ^0.1800.0 || ^0.1900.0 || ^0.2000.0 || 0.2000.0-rc.2", - "@angular-devkit/core": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2", - "@angular-devkit/schematics": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2", - "@schematics/angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2", + "@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0 || ^0.1601.0 || ^0.1700.0 || ^0.1800.0 || ^0.1900.0 || ^0.2000.0", + "@angular-devkit/core": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", + "@angular-devkit/schematics": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", + "@schematics/angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", "xmldoc": "^1.1.3" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "@angular-devkit/build-angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2" + "@angular-devkit/build-angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0" } }, "node_modules/ng-extract-i18n-merge/node_modules/@angular-devkit/architect": { diff --git a/package.json b/package.json index 738bf317a..1e717258e 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "2.15.0", + "ng-extract-i18n-merge": "2.15.1", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", "ngx-skeleton-loader": "11.0.0", From e2ec635bbff27bdba8edfe0c703844c4b26f78ba Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 6 Jun 2025 07:41:35 +0200 Subject: [PATCH 2/2] Feature/localize X-ray rule EmergencyFundSetup (#4835) * Set up language localization for static portfolio analysis rule: Emergency Fund (Set up) * Update changelog --- CHANGELOG.md | 1 + .../src/app/portfolio/portfolio.service.ts | 1 + apps/api/src/app/user/user.service.ts | 1 + .../emergency-fund/emergency-fund-setup.ts | 19 ++++++++++++++++--- apps/client/src/app/pages/i18n/i18n-page.html | 7 +++++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d53d2290c..ecbfdad28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Set up the language localization for the static portfolio analysis rule: _Emergency Fund_ (Setup) - Set up the language localization for the static portfolio analysis rule: _Fees_ (Fee Ratio) ### Changed diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 313721a17..9f1901c7f 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1319,6 +1319,7 @@ export class PortfolioService { [ new EmergencyFundSetup( this.exchangeRateDataService, + userSettings.language, this.getTotalEmergencyFund({ userSettings, emergencyFundHoldingsValueInBaseCurrency: diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 774f9746b..21790182f 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -298,6 +298,7 @@ export class UserService { undefined ).getSettings(user.Settings.settings), EmergencyFundSetup: new EmergencyFundSetup( + undefined, undefined, undefined ).getSettings(user.Settings.settings), diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts index 8b53e6799..a91e68425 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts @@ -1,16 +1,20 @@ import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface'; import { Rule } from '@ghostfolio/api/models/rule'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; import { UserSettings } from '@ghostfolio/common/interfaces'; export class EmergencyFundSetup extends Rule { private emergencyFund: number; + private i18nService = new I18nService(); public constructor( protected exchangeRateDataService: ExchangeRateDataService, + languageCode: string, emergencyFund: number ) { super(exchangeRateDataService, { + languageCode, key: EmergencyFundSetup.name }); @@ -20,13 +24,19 @@ export class EmergencyFundSetup extends Rule { public evaluate() { if (!this.emergencyFund) { return { - evaluation: 'No emergency fund has been set up', + evaluation: this.i18nService.getTranslation({ + id: 'rule.emergencyFundSetup.false', + languageCode: this.getLanguageCode() + }), value: false }; } return { - evaluation: 'An emergency fund has been set up', + evaluation: this.i18nService.getTranslation({ + id: 'rule.emergencyFundSetup.true', + languageCode: this.getLanguageCode() + }), value: true }; } @@ -36,7 +46,10 @@ export class EmergencyFundSetup extends Rule { } public getName() { - return 'Emergency Fund: Set up'; + return this.i18nService.getTranslation({ + id: 'rule.emergencyFundSetup', + languageCode: this.getLanguageCode() + }); } public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { diff --git a/apps/client/src/app/pages/i18n/i18n-page.html b/apps/client/src/app/pages/i18n/i18n-page.html index e1c244265..f54a45b3f 100644 --- a/apps/client/src/app/pages/i18n/i18n-page.html +++ b/apps/client/src/app/pages/i18n/i18n-page.html @@ -11,6 +11,13 @@ performance, portfolio, software, stock, trading, wealth, web3
  • My Account
  • +
  • Emergency Fund: Set up
  • +
  • + No emergency fund has been set up +
  • +
  • + An emergency fund has been set up +
  • Fee Ratio
  • The fees do exceed {thresholdMax}% of your initial investment