From 77efbc5a437b5be665b83467f5fab5b9366b36d8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 18:35:29 +0200 Subject: [PATCH] Task/refactor default locale (#7066) Refactor default locale --- apps/api/src/app/user/user.service.ts | 6 +++--- .../admin-market-data/admin-market-data.component.ts | 8 ++++---- .../app/components/admin-users/admin-users.component.ts | 4 ++-- .../components/home-watchlist/home-watchlist.component.ts | 4 ++-- .../create-or-update-activity-dialog.component.ts | 5 ++--- libs/common/src/lib/config.ts | 3 +-- libs/common/src/lib/helper.ts | 8 ++++---- .../fire-calculator/fire-calculator.component.stories.ts | 4 ++-- 8 files changed, 20 insertions(+), 22 deletions(-) diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 6d6041c81..0c159bc1c 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -28,11 +28,11 @@ import { DEFAULT_CURRENCY, DEFAULT_DATE_RANGE, DEFAULT_LANGUAGE_CODE, + DEFAULT_LOCALE, PROPERTY_IS_READ_ONLY_MODE, PROPERTY_REFERRAL_PARTNERS, PROPERTY_SYSTEM_MESSAGE, - TAG_ID_EXCLUDE_FROM_ANALYSIS, - locale as defaultLocale + TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; import { SubscriptionType } from '@ghostfolio/common/enums'; import { @@ -102,7 +102,7 @@ export class UserService { public async getUser({ impersonationUserId, - locale = defaultLocale, + locale = DEFAULT_LOCALE, user }: { impersonationUserId: string; diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index 805adf89d..a4a9b6e19 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -1,8 +1,8 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_COLOR_SCHEME, - DEFAULT_PAGE_SIZE, - locale + DEFAULT_LOCALE, + DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { canDeleteAssetProfile, @@ -429,7 +429,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { colorScheme: this.user?.settings.colorScheme ?? DEFAULT_COLOR_SCHEME, deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? locale + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE } satisfies AssetProfileDialogParams, height: this.deviceType() === 'mobile' ? '98vh' : '80vh', width: this.deviceType() === 'mobile' ? '100vw' : '50rem' @@ -464,7 +464,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { autoFocus: false, data: { deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? locale + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE } satisfies CreateAssetProfileDialogParams, width: this.deviceType() === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index f477776a5..15133b781 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -5,7 +5,7 @@ import { import { GfUserDetailDialogComponent } from '@ghostfolio/client/components/user-detail-dialog/user-detail-dialog.component'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { DEFAULT_PAGE_SIZE, locale } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE, DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getDateFnsLocale, @@ -317,7 +317,7 @@ export class GfAdminUsersComponent implements OnInit { currentUserId: this.user?.id, deviceType: this.deviceType(), hasPermissionForSubscription: this.hasPermissionForSubscription, - locale: this.user?.settings?.locale ?? locale, + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE, userId: aUserId } satisfies UserDetailDialogParams, height: this.deviceType() === 'mobile' ? '98vh' : '60vh', diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts index 22d829daa..0107f36a2 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -1,6 +1,6 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { locale as defaultLocale } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { AssetProfileIdentifier, Benchmark, @@ -149,7 +149,7 @@ export class GfHomeWatchlistComponent implements OnInit { autoFocus: false, data: { deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? defaultLocale + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE }, width: this.deviceType() === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index decb30682..ba17dbef3 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -1,6 +1,5 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { ASSET_CLASS_MAPPING } from '@ghostfolio/common/config'; -import { locale as defaultLocale } from '@ghostfolio/common/config'; +import { ASSET_CLASS_MAPPING, DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { CreateOrderDto, UpdateOrderDto } from '@ghostfolio/common/dtos'; import { getDateFormatString } from '@ghostfolio/common/helper'; import { @@ -120,7 +119,7 @@ export class GfCreateOrUpdateActivityDialogComponent { this.hasPermissionToCreateOwnTag = this.data.user?.settings?.isExperimentalFeatures && hasPermission(this.data.user?.permissions, permissions.createOwnTag); - this.locale = this.data.user.settings.locale ?? defaultLocale; + this.locale = this.data.user.settings.locale ?? DEFAULT_LOCALE; this.mode = this.data.activity?.id ? 'update' : 'create'; this.dateAdapter.setLocale(this.locale); diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 3e7fbe6df..4924aaeea 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -13,8 +13,6 @@ export const ghostfolioFearAndGreedIndexSymbol = `${ghostfolioScraperApiSymbolPr export const ghostfolioFearAndGreedIndexSymbolCryptocurrencies = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_CRYPTOCURRENCIES`; export const ghostfolioFearAndGreedIndexSymbolStocks = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_STOCKS`; -export const locale = 'en-US'; - export const primaryColorHex = '#36cfcc'; export const primaryColorRgb = { r: 54, @@ -85,6 +83,7 @@ export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_DATE_RANGE: DateRange = 'max'; export const DEFAULT_HOST = '0.0.0.0'; export const DEFAULT_LANGUAGE_CODE = 'en'; +export const DEFAULT_LOCALE = 'en-US'; export const DEFAULT_PAGE_SIZE = 50; export const DEFAULT_PORT = 3333; export const DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY = 1; diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index a29129f91..3ca95d9f6 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -36,12 +36,12 @@ import { get, isNil, isString } from 'lodash'; import { DEFAULT_CURRENCY, + DEFAULT_LOCALE, DERIVED_CURRENCIES, ghostfolioFearAndGreedIndexSymbol, ghostfolioFearAndGreedIndexSymbolCryptocurrencies, ghostfolioFearAndGreedIndexSymbolStocks, - ghostfolioScraperApiSymbolPrefix, - locale + ghostfolioScraperApiSymbolPrefix } from './config'; import { AdminMarketDataItem, @@ -261,7 +261,7 @@ export function getCurrencyFromSymbol(aSymbol = '') { export function getCountryName({ code }: { code: string }): string { try { return ( - new Intl.DisplayNames([document.documentElement.lang || locale], { + new Intl.DisplayNames([document.documentElement.lang || DEFAULT_LOCALE], { type: 'region' }).of(code) ?? code ); @@ -338,7 +338,7 @@ export function getEmojiFlag(aCountryCode: string) { } export function getLocale() { - return navigator.language ?? locale; + return navigator.language ?? DEFAULT_LOCALE; } export function getLowercase(object: object, path: string) { diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts index 0872c2aac..ad80499d7 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts @@ -1,4 +1,4 @@ -import { locale } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -47,7 +47,7 @@ export const Simple: Story = { annualInterestRate: 5, currency: 'USD', fireWealth: 50000, - locale: locale, + locale: DEFAULT_LOCALE, savingsRate: 1000 } };