diff --git a/CHANGELOG.md b/CHANGELOG.md index f345550243..0d11f881a2 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 ### Fixed +- Fixed the missing thousands separator of 4-digit numbers in certain locales - Fixed an issue where holdings without a market price have been valued at the unit price of a dividend, a fee, an interest or a liability ## 3.79.0 - 2026-10-04 diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-coverage.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-coverage.ts index bef127ca41..8bdc9307bc 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-coverage.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-coverage.ts @@ -53,7 +53,8 @@ export class EmergencyFundCoverage extends Rule { const placeholders = { baseCurrency: ruleSettings.baseCurrency, emergencyFund: this.emergencyFundInBaseCurrency.toLocaleString( - ruleSettings.locale + ruleSettings.locale, + { useGrouping: true } ) }; diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts index b22654cfe9..0ad6ac0a0f 100644 --- a/apps/api/src/models/rules/liquidity/buying-power.ts +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -44,7 +44,8 @@ export class BuyingPower extends Rule { placeholders: { baseCurrency: ruleSettings.baseCurrency, thresholdMin: ruleSettings.thresholdMin.toLocaleString( - ruleSettings.locale + ruleSettings.locale, + { useGrouping: true } ) } }), @@ -59,7 +60,8 @@ export class BuyingPower extends Rule { placeholders: { baseCurrency: ruleSettings.baseCurrency, thresholdMin: ruleSettings.thresholdMin.toLocaleString( - ruleSettings.locale + ruleSettings.locale, + { useGrouping: true } ) } }), diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index 72b9194890..fd1b72fcaf 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -170,7 +170,8 @@ export class GfAdminOverviewComponent implements OnInit { this.activitiesCount / this.userCount ).toLocaleString(this.user?.settings?.locale, { maximumFractionDigits: 2, - minimumFractionDigits: 2 + minimumFractionDigits: 2, + useGrouping: true }); return `(${formattedActivitiesCountPerUser} ${$localize`per User`})`; diff --git a/libs/common/src/lib/chart-helper.ts b/libs/common/src/lib/chart-helper.ts index bad13d0bac..72b629556a 100644 --- a/libs/common/src/lib/chart-helper.ts +++ b/libs/common/src/lib/chart-helper.ts @@ -123,7 +123,8 @@ export function getTooltipOptions({ if (currency) { label += `${yPoint.toLocaleString(locale, { maximumFractionDigits: 2, - minimumFractionDigits: 2 + minimumFractionDigits: 2, + useGrouping: true })} ${currency}`; } else if (unit) { label += `${yPoint.toFixed(2)} ${unit}`; diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index 64bcec2934..057ce796bb 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -358,7 +358,8 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { return `Total: ${new Intl.NumberFormat(this.locale, { currency: this.currency ?? DEFAULT_CURRENCY, currencyDisplay: 'code', - style: 'currency' + style: 'currency', + useGrouping: true }).format(totalAmount)}`; }, label: (context) => { @@ -372,7 +373,8 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { label += new Intl.NumberFormat(this.locale, { currency: this.currency ?? DEFAULT_CURRENCY, currencyDisplay: 'code', - style: 'currency' + style: 'currency', + useGrouping: true }).format(context.parsed.y); } diff --git a/libs/ui/src/lib/line-chart/line-chart.component.ts b/libs/ui/src/lib/line-chart/line-chart.component.ts index 782d987856..e6f1b9b2e2 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -258,7 +258,8 @@ export class GfLineChartComponent if (typeof tickValue === 'number') { return tickValue.toLocaleString(this.locale, { maximumFractionDigits: 2, - minimumFractionDigits: 2 + minimumFractionDigits: 2, + useGrouping: true }); } diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index e27097a701..b837d887b7 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -496,7 +496,8 @@ export class GfPortfolioProportionChartComponent `${name ?? symbol}`, `${value.toLocaleString(this.locale, { maximumFractionDigits: 2, - minimumFractionDigits: 2 + minimumFractionDigits: 2, + useGrouping: true })} ${this.baseCurrency ?? ''} (${percentage.toFixed(2)}%)` ]; } diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index 11c7edbf63..5eb7e1bf62 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -324,7 +324,8 @@ export class GfTreemapChartComponent ).toLocaleString(this.locale(), { maximumFractionDigits: 2, minimumFractionDigits: 2, - signDisplay: 'exceptZero' + signDisplay: 'exceptZero', + useGrouping: true })}%` ]; }, @@ -401,7 +402,8 @@ export class GfTreemapChartComponent raw._data.allocationInPercentage * 100 ).toLocaleString(this.locale(), { maximumFractionDigits: 2, - minimumFractionDigits: 2 + minimumFractionDigits: 2, + useGrouping: true })}%`; const name = getHoldingName(raw._data.assetProfile); @@ -410,7 +412,8 @@ export class GfTreemapChartComponent ).toLocaleString(this.locale(), { maximumFractionDigits: 2, minimumFractionDigits: 2, - signDisplay: 'exceptZero' + signDisplay: 'exceptZero', + useGrouping: true })}%`; if (raw._data.valueInBaseCurrency !== null) { @@ -420,7 +423,8 @@ export class GfTreemapChartComponent `${name} (${allocationInPercentage})`, `${value?.toLocaleString(this.locale(), { maximumFractionDigits: 2, - minimumFractionDigits: 2 + minimumFractionDigits: 2, + useGrouping: true })} ${this.baseCurrency()}`, '', $localize`Change` + ' (' + $localize`Performance` + ')', @@ -429,7 +433,8 @@ export class GfTreemapChartComponent { maximumFractionDigits: 2, minimumFractionDigits: 2, - signDisplay: 'exceptZero' + signDisplay: 'exceptZero', + useGrouping: true } )} ${this.baseCurrency()} (${netPerformanceInPercentageWithSign})` ]; diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts index dfbe461f60..baa588bbd9 100644 --- a/libs/ui/src/lib/value/value.component.ts +++ b/libs/ui/src/lib/value/value.component.ts @@ -83,7 +83,8 @@ export class GfValueComponent implements AfterViewInit, OnChanges, OnDestroy { return { maximumFractionDigits: digits, - minimumFractionDigits: digits + minimumFractionDigits: digits, + useGrouping: true }; }); @@ -150,7 +151,9 @@ export class GfValueComponent implements AfterViewInit, OnChanges, OnDestroy { ); } catch {} } else { - this.formattedValue = this.value?.toLocaleString(this.locale); + this.formattedValue = this.value?.toLocaleString(this.locale, { + useGrouping: true + }); } if (this.isAbsolute) {