From 3adf88044486df623d9dd1bc3ea6e5f4a1285ff7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:24:52 +0200 Subject: [PATCH 01/42] Task/extend personal finance tools (#6985) * Gustav * MyFinanceTools * Networthy * Rallies * trefolio --- libs/common/src/lib/personal-finance-tools.ts | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index e7d964872..23697e63b 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -518,6 +518,18 @@ export const personalFinanceTools: Product[] = [ origin: 'Germany', slogan: 'Volle Kontrolle über deine Investitionen' }, + { + founded: 2024, + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'gustav', + languages: ['Français'], + name: 'Gustav', + origin: 'France', + pricingPerYear: '€59.99', + slogan: 'Prenez enfin le contrôle de votre argent', + url: 'https://get-gustav.com' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -784,6 +796,16 @@ export const personalFinanceTools: Product[] = [ 'Track your equity, fund, investment trust, ETF and pension investments in one place.', url: 'https://www.morningstar.com/mm' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'myfinancetools', + languages: ['Deutsch', 'English', 'Español', 'Français', 'Português'], + name: 'MyFinanceTools', + pricingPerYear: '$36', + slogan: 'Your Personal Finance Command Center', + url: 'https://myfinancetools.io' + }, { founded: 2020, hasFreePlan: true, @@ -806,6 +828,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Intelligent Portfolio Tracker', url: 'https://www.navexa.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'networthy', + name: 'Networthy', + pricingPerYear: '€49.99', + slogan: 'Your Personal Financial Analyst, powered by AI.', + url: 'https://networthy.pro' + }, { founded: 2020, hasSelfHostingAbility: false, @@ -955,6 +986,17 @@ export const personalFinanceTools: Product[] = [ slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'rallies', + languages: ['English'], + name: 'Rallies', + pricingPerYear: '$99.99', + slogan: + 'Your entire financial life in one app, monitored continuously by agents', + url: 'https://rallies.ai' + }, { founded: 2015, hasSelfHostingAbility: false, @@ -1130,6 +1172,25 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Trading Journal to Improve Your Trading Performance', url: 'https://www.tradervue.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'trefolio', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Nederlands', + 'Polski', + 'Português' + ], + name: 'trefolio', + pricingPerYear: '€60', + slogan: 'The Extra Leaf for Your Portfolio', + url: 'https://trefolio.com' + }, { founded: 2020, hasSelfHostingAbility: false, From 7b0ebf1587941f35bf279840a2006fbc7b4e1f27 Mon Sep 17 00:00:00 2001 From: Ankit Singh Date: Fri, 5 Jun 2026 20:55:41 +0530 Subject: [PATCH 02/42] Feature/auto-refresh user table in admin control panel every 30s (#6954) * Auto-refresh user table * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 6 +++++ .../admin-users/admin-users.component.ts | 22 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 451390256..472d0678b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added an automatic refresh every 30 seconds to the users table in the admin control panel + ## 3.7.0 - 2026-06-02 ### Added 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 93899c9ee..f477776a5 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 @@ -59,8 +59,10 @@ import { personOutline, trashOutline } from 'ionicons/icons'; +import ms from 'ms'; import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; +import { interval } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; @Component({ @@ -184,6 +186,15 @@ export class GfAdminUsersComponent implements OnInit { public ngOnInit() { this.fetchUsers(); + + interval(ms('30 seconds')) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.fetchUsers({ + pageIndex: this.paginator().pageIndex, + showLoading: false + }); + }); } protected formatDistanceToNow(aDateString: string) { @@ -267,8 +278,13 @@ export class GfAdminUsersComponent implements OnInit { ); } - private fetchUsers({ pageIndex }: { pageIndex: number } = { pageIndex: 0 }) { - this.isLoading = true; + private fetchUsers({ + pageIndex = 0, + showLoading = true + }: { pageIndex?: number; showLoading?: boolean } = {}) { + if (showLoading) { + this.isLoading = true; + } if (pageIndex === 0 && this.paginator()) { this.paginator().pageIndex = 0; @@ -281,7 +297,7 @@ export class GfAdminUsersComponent implements OnInit { }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ count, users }) => { - this.dataSource = new MatTableDataSource(users); + this.dataSource.data = users; this.totalItems = count; this.isLoading = false; From 9c18b04d4342488966ac0a828b356659a7ec9fe0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 08:50:32 +0200 Subject: [PATCH 03/42] Bugfix/truncate long titles in asset profile dialog (#6990) * Truncate long titles * Update changelog --- CHANGELOG.md | 4 ++++ .../asset-profile-dialog.component.scss | 4 ++++ .../asset-profile-dialog/asset-profile-dialog.html | 12 ++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 472d0678b..2e315dfc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added an automatic refresh every 30 seconds to the users table in the admin control panel +### Fixed + +- Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles + ## 3.7.0 - 2026-06-02 ### Added diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss index 73c0c0d74..db23cf0a7 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss @@ -14,4 +14,8 @@ top: 0; } } + + .mat-mdc-dialog-title { + padding-right: 0.5rem !important; + } } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index b2a7e0a05..61ca6a6da 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1,10 +1,10 @@
-
-

- {{ assetProfile?.name ?? data.symbol }} -

+

+ {{ + assetProfile?.name ?? data.symbol + }} -

+
Date: Sat, 6 Jun 2026 09:25:28 +0200 Subject: [PATCH 04/42] Task/migrate backend logger to instance pattern (#6966) * Refactor backend logging to use instance-based Logger * Update changelog --- CHANGELOG.md | 4 ++ apps/api/src/app/admin/admin.controller.ts | 4 +- apps/api/src/app/auth/auth.module.ts | 4 +- apps/api/src/app/auth/google.strategy.ts | 4 +- apps/api/src/app/auth/oidc.strategy.ts | 9 +-- apps/api/src/app/auth/web-auth.service.ts | 6 +- .../benchmarks/benchmarks.service.ts | 7 ++- .../ghostfolio/ghostfolio.service.ts | 12 ++-- apps/api/src/app/health/health.controller.ts | 4 +- apps/api/src/app/import/import.controller.ts | 4 +- .../calculator/portfolio-calculator.ts | 7 ++- .../calculator/roai/portfolio-calculator.ts | 6 +- .../src/app/portfolio/portfolio.service.ts | 7 ++- .../app/redis-cache/redis-cache.service.ts | 6 +- .../subscription/subscription.controller.ts | 14 ++--- .../app/subscription/subscription.service.ts | 9 +-- apps/api/src/app/symbol/symbol.service.ts | 4 +- .../events/asset-profile-changed.listener.ts | 12 ++-- .../src/events/portfolio-changed.listener.ts | 7 +-- .../performance-logging.service.ts | 4 +- apps/api/src/main.ts | 18 +++--- .../middlewares/html-template.middleware.ts | 8 +-- .../services/benchmark/benchmark.service.ts | 6 +- .../coingecko/coingecko.service.ts | 8 ++- .../trackinsight/trackinsight.service.ts | 7 ++- .../yahoo-finance/yahoo-finance.service.ts | 6 +- .../data-provider/data-provider.service.ts | 31 ++++++----- .../eod-historical-data.service.ts | 21 ++++--- .../financial-modeling-prep.service.ts | 13 +++-- .../ghostfolio/ghostfolio.service.ts | 12 ++-- .../google-sheets/google-sheets.service.ts | 4 +- .../data-provider/manual/manual.service.ts | 9 +-- .../rapid-api/rapid-api.service.ts | 6 +- .../yahoo-finance/yahoo-finance.service.ts | 23 +++----- .../exchange-rate-data.service.ts | 19 +++---- apps/api/src/services/fetch/fetch.service.ts | 24 +++----- apps/api/src/services/i18n/i18n.service.ts | 8 ++- .../api/src/services/prisma/prisma.service.ts | 4 +- .../data-gathering.processor.ts | 42 ++++++-------- .../data-gathering/data-gathering.service.ts | 15 ++--- .../portfolio-snapshot.processor.ts | 17 +++--- .../statistics-gathering.processor.ts | 55 +++++++------------ .../twitter-bot/twitter-bot.service.ts | 9 +-- 43 files changed, 249 insertions(+), 250 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e315dfc9..35ca028a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added an automatic refresh every 30 seconds to the users table in the admin control panel +### Changed + +- Refactored the backend logging to use the instance-based `Logger` + ### Fixed - Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 69b619625..97642feb5 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -58,6 +58,8 @@ import { AdminService } from './admin.service'; @Controller('admin') export class AdminController { + private readonly logger = new Logger(AdminController.name); + public constructor( private readonly adminService: AdminService, private readonly apiService: ApiService, @@ -260,7 +262,7 @@ export class AdminController { `Could not parse the market price for ${symbol} (${dataSource})` ); } catch (error) { - Logger.error(error, 'AdminController'); + this.logger.error(error); throw new HttpException(error.message, StatusCodes.BAD_REQUEST); } diff --git a/apps/api/src/app/auth/auth.module.ts b/apps/api/src/app/auth/auth.module.ts index f55093bbf..1d6990307 100644 --- a/apps/api/src/app/auth/auth.module.ts +++ b/apps/api/src/app/auth/auth.module.ts @@ -50,6 +50,8 @@ import { OidcStrategy } from './oidc.strategy'; configurationService: ConfigurationService, fetchService: FetchService ) => { + const logger = new Logger('OidcStrategy'); + const isOidcEnabled = configurationService.get( 'ENABLE_FEATURE_AUTH_OIDC' ); @@ -101,7 +103,7 @@ import { OidcStrategy } from './oidc.strategy'; tokenURL = manualTokenUrl || config.token_endpoint; userInfoURL = manualUserInfoUrl || config.userinfo_endpoint; } catch (error) { - Logger.error(error, 'OidcStrategy'); + logger.error(error); throw new Error('Failed to fetch OIDC configuration from issuer'); } } diff --git a/apps/api/src/app/auth/google.strategy.ts b/apps/api/src/app/auth/google.strategy.ts index 3e4b4ca0d..53720c383 100644 --- a/apps/api/src/app/auth/google.strategy.ts +++ b/apps/api/src/app/auth/google.strategy.ts @@ -10,6 +10,8 @@ import { AuthService } from './auth.service'; @Injectable() export class GoogleStrategy extends PassportStrategy(Strategy, 'google') { + private readonly logger = new Logger(GoogleStrategy.name); + public constructor( private readonly authService: AuthService, configurationService: ConfigurationService @@ -40,7 +42,7 @@ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') { done(null, { jwt }); } catch (error) { - Logger.error(error, 'GoogleStrategy'); + this.logger.error(error); done(error, false); } } diff --git a/apps/api/src/app/auth/oidc.strategy.ts b/apps/api/src/app/auth/oidc.strategy.ts index 96b284121..661f2a821 100644 --- a/apps/api/src/app/auth/oidc.strategy.ts +++ b/apps/api/src/app/auth/oidc.strategy.ts @@ -15,6 +15,8 @@ import { OidcStateStore } from './oidc-state.store'; @Injectable() export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { + private readonly logger = new Logger(OidcStrategy.name); + private static readonly stateStore = new OidcStateStore(); public constructor( @@ -52,9 +54,8 @@ export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { }); if (!thirdPartyId) { - Logger.error( - `Missing subject identifier in OIDC response from ${issuer}`, - 'OidcStrategy' + this.logger.error( + `Missing subject identifier in OIDC response from ${issuer}` ); throw new Error('Missing subject identifier in OIDC response'); @@ -62,7 +63,7 @@ export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { return { jwt }; } catch (error) { - Logger.error(error, 'OidcStrategy'); + this.logger.error(error); throw error; } } diff --git a/apps/api/src/app/auth/web-auth.service.ts b/apps/api/src/app/auth/web-auth.service.ts index 6cffcd244..5764eeece 100644 --- a/apps/api/src/app/auth/web-auth.service.ts +++ b/apps/api/src/app/auth/web-auth.service.ts @@ -33,6 +33,8 @@ import ms from 'ms'; @Injectable() export class WebAuthService { + private readonly logger = new Logger(WebAuthService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly deviceService: AuthDeviceService, @@ -103,7 +105,7 @@ export class WebAuthService { verification = await verifyRegistrationResponse(opts); } catch (error) { - Logger.error(error, 'WebAuthService'); + this.logger.error(error); throw new InternalServerErrorException(error.message); } @@ -210,7 +212,7 @@ export class WebAuthService { verification = await verifyAuthenticationResponse(opts); } catch (error) { - Logger.error(error, 'WebAuthService'); + this.logger.error(error); throw new InternalServerErrorException({ error: error.message }); } diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts index 03ff32c21..0b95880d4 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts @@ -17,6 +17,8 @@ import { isNumber } from 'lodash'; @Injectable() export class BenchmarksService { + private readonly logger = new Logger(BenchmarksService.name); + public constructor( private readonly benchmarkService: BenchmarkService, private readonly exchangeRateDataService: ExchangeRateDataService, @@ -96,12 +98,11 @@ export class BenchmarksService { })?.marketPrice; if (!marketPriceAtStartDate) { - Logger.error( + this.logger.error( `No historical market data has been found for ${symbol} (${dataSource}) at ${format( startDate, DATE_FORMAT - )}`, - 'BenchmarkService' + )}` ); return { marketData }; diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index 3f91dbecc..b84ca881f 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -34,6 +34,8 @@ import { Big } from 'big.js'; @Injectable() export class GhostfolioService { + private readonly logger = new Logger(GhostfolioService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly dataProviderService: DataProviderService, @@ -99,7 +101,7 @@ export class GhostfolioService { return result; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -141,7 +143,7 @@ export class GhostfolioService { return result; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -183,7 +185,7 @@ export class GhostfolioService { return result; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -271,7 +273,7 @@ export class GhostfolioService { return results; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -348,7 +350,7 @@ export class GhostfolioService { return results; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } diff --git a/apps/api/src/app/health/health.controller.ts b/apps/api/src/app/health/health.controller.ts index 35f3fa348..4f88a03f0 100644 --- a/apps/api/src/app/health/health.controller.ts +++ b/apps/api/src/app/health/health.controller.ts @@ -24,6 +24,8 @@ import { HealthService } from './health.service'; @Controller('health') export class HealthController { + private readonly logger = new Logger(HealthController.name); + public constructor( private readonly aiService: AiService, private readonly healthService: HealthService @@ -61,7 +63,7 @@ export class HealthController { .json({ status: getReasonPhrase(StatusCodes.OK) }); } } catch (error) { - Logger.error(error, 'HealthController'); + this.logger.error(error); } return response diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index 521be56f7..c3e79a29f 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -31,6 +31,8 @@ import { ImportService } from './import.service'; @Controller('import') export class ImportController { + private readonly logger = new Logger(ImportController.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly importService: ImportService, @@ -81,7 +83,7 @@ export class ImportController { return { activities }; } catch (error) { - Logger.error(error, ImportController); + this.logger.error(error); throw new HttpException( { diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index d57b85d8c..ab3f76703 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -62,6 +62,8 @@ import { isNumber, sortBy, sum, uniqBy } from 'lodash'; export abstract class PortfolioCalculator { protected static readonly ENABLE_LOGGING = false; + protected readonly logger = new Logger(PortfolioCalculator.name); + protected accountBalanceItems: HistoricalDataItem[]; protected activities: PortfolioOrder[]; @@ -1119,12 +1121,11 @@ export abstract class PortfolioCalculator { if (cachedPortfolioSnapshot) { this.snapshot = cachedPortfolioSnapshot; - Logger.debug( + this.logger.debug( `Fetched portfolio snapshot from cache in ${( (performance.now() - startTimeTotal) / 1000 - ).toFixed(3)} seconds`, - 'PortfolioCalculator' + ).toFixed(3)} seconds` ); if (isCachedPortfolioSnapshotExpired) { diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 2841e9975..d5efc4bf2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -11,7 +11,6 @@ import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models'; import { DateRange } from '@ghostfolio/common/types'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; -import { Logger } from '@nestjs/common'; import { Big } from 'big.js'; import { addMilliseconds, @@ -96,9 +95,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { currentPosition.timeWeightedInvestmentWithCurrencyEffect ); } else if (!currentPosition.quantity.eq(0)) { - Logger.warn( - `Missing historical market data for ${currentPosition.symbol} (${currentPosition.dataSource})`, - 'PortfolioCalculator' + this.logger.warn( + `Missing historical market data for ${currentPosition.symbol} (${currentPosition.dataSource})` ); hasErrors = true; diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 37d76bcfa..4feb0f77a 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -108,6 +108,8 @@ const europeMarkets = require('../../assets/countries/europe-markets.json'); @Injectable() export class PortfolioService { + private readonly logger = new Logger(PortfolioService.name); + public constructor( private readonly accountBalanceService: AccountBalanceService, private readonly accountService: AccountService, @@ -619,9 +621,8 @@ export class PortfolioService { symbolProfileMap[getAssetProfileIdentifier({ dataSource, symbol })]; if (!assetProfile) { - Logger.warn( - `Asset profile not found for ${symbol} (${dataSource})`, - 'PortfolioService' + this.logger.warn( + `Asset profile not found for ${symbol} (${dataSource})` ); continue; diff --git a/apps/api/src/app/redis-cache/redis-cache.service.ts b/apps/api/src/app/redis-cache/redis-cache.service.ts index 619d23fc5..b87740f8c 100644 --- a/apps/api/src/app/redis-cache/redis-cache.service.ts +++ b/apps/api/src/app/redis-cache/redis-cache.service.ts @@ -10,6 +10,8 @@ import { createHash, randomUUID } from 'node:crypto'; @Injectable() export class RedisCacheService { + private readonly logger = new Logger(RedisCacheService.name); + private client: Keyv; public constructor( @@ -27,7 +29,7 @@ export class RedisCacheService { }; this.client.on('error', (error) => { - Logger.error(error, 'RedisCacheService'); + this.logger.error(error); }); } @@ -101,7 +103,7 @@ export class RedisCacheService { return true; } catch (error) { - Logger.error(error?.message, 'RedisCacheService'); + this.logger.error(error?.message); return false; } finally { diff --git a/apps/api/src/app/subscription/subscription.controller.ts b/apps/api/src/app/subscription/subscription.controller.ts index 3e6316ec6..074a9db0e 100644 --- a/apps/api/src/app/subscription/subscription.controller.ts +++ b/apps/api/src/app/subscription/subscription.controller.ts @@ -33,6 +33,8 @@ import { SubscriptionService } from './subscription.service'; @Controller('subscription') export class SubscriptionController { + private readonly logger = new Logger(SubscriptionController.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly propertyService: PropertyService, @@ -80,9 +82,8 @@ export class SubscriptionController { value: JSON.stringify(coupons) }); - Logger.log( - `Subscription for user '${this.request.user.id}' has been created with a coupon for ${coupon.duration}`, - 'SubscriptionController' + this.logger.log( + `Subscription for user '${this.request.user.id}' has been created with a coupon for ${coupon.duration}` ); return { @@ -101,9 +102,8 @@ export class SubscriptionController { ); if (userId) { - Logger.log( - `Subscription for user '${userId}' has been created via Stripe`, - 'SubscriptionController' + this.logger.log( + `Subscription for user '${userId}' has been created via Stripe` ); } @@ -126,7 +126,7 @@ export class SubscriptionController { user: this.request.user }); } catch (error) { - Logger.error(error, 'SubscriptionController'); + this.logger.error(error); throw new HttpException( getReasonPhrase(StatusCodes.BAD_REQUEST), diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 557d81976..a811d2243 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -24,6 +24,8 @@ import Stripe from 'stripe'; @Injectable() export class SubscriptionService { + private readonly logger = new Logger(SubscriptionService.name); + private stripe: Stripe; public constructor( @@ -166,9 +168,8 @@ export class SubscriptionService { error instanceof Prisma.PrismaClientKnownRequestError && error.code === 'P2002' ) { - Logger.log( - `Stripe Checkout Session '${session.id}' has already been redeemed`, - 'SubscriptionService' + this.logger.log( + `Stripe Checkout Session '${session.id}' has already been redeemed` ); } else { throw error; @@ -177,7 +178,7 @@ export class SubscriptionService { return session.client_reference_id; } catch (error) { - Logger.error(error, 'SubscriptionService'); + this.logger.error(error); } } diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/app/symbol/symbol.service.ts index 15498e80d..fdbc7f84c 100644 --- a/apps/api/src/app/symbol/symbol.service.ts +++ b/apps/api/src/app/symbol/symbol.service.ts @@ -15,6 +15,8 @@ import { format, subDays } from 'date-fns'; @Injectable() export class SymbolService { + private readonly logger = new Logger(SymbolService.name); + public constructor( private readonly dataProviderService: DataProviderService, private readonly marketDataService: MarketDataService @@ -119,7 +121,7 @@ export class SymbolService { results.items = items; return results; } catch (error) { - Logger.error(error, 'SymbolService'); + this.logger.error(error); throw error; } diff --git a/apps/api/src/events/asset-profile-changed.listener.ts b/apps/api/src/events/asset-profile-changed.listener.ts index cc70edad6..e2aea382e 100644 --- a/apps/api/src/events/asset-profile-changed.listener.ts +++ b/apps/api/src/events/asset-profile-changed.listener.ts @@ -15,6 +15,8 @@ import { AssetProfileChangedEvent } from './asset-profile-changed.event'; @Injectable() export class AssetProfileChangedListener { + private readonly logger = new Logger(AssetProfileChangedListener.name); + private static readonly DEBOUNCE_DELAY = ms('5 seconds'); private debounceTimers = new Map(); @@ -67,10 +69,7 @@ export class AssetProfileChangedListener { dataSource: DataSource; symbol: string; }) { - Logger.log( - `Asset profile of ${symbol} (${dataSource}) has changed`, - 'AssetProfileChangedListener' - ); + this.logger.log(`Asset profile of ${symbol} (${dataSource}) has changed`); if ( this.configurationService.get( @@ -84,10 +83,7 @@ export class AssetProfileChangedListener { const existingCurrencies = this.exchangeRateDataService.getCurrencies(); if (!existingCurrencies.includes(currency)) { - Logger.log( - `New currency ${currency} has been detected`, - 'AssetProfileChangedListener' - ); + this.logger.log(`New currency ${currency} has been detected`); await this.exchangeRateDataService.initialize(); } diff --git a/apps/api/src/events/portfolio-changed.listener.ts b/apps/api/src/events/portfolio-changed.listener.ts index f8e2a9229..12441517b 100644 --- a/apps/api/src/events/portfolio-changed.listener.ts +++ b/apps/api/src/events/portfolio-changed.listener.ts @@ -8,6 +8,8 @@ import { PortfolioChangedEvent } from './portfolio-changed.event'; @Injectable() export class PortfolioChangedListener { + private readonly logger = new Logger(PortfolioChangedListener.name); + private static readonly DEBOUNCE_DELAY = ms('5 seconds'); private debounceTimers = new Map(); @@ -35,10 +37,7 @@ export class PortfolioChangedListener { } private async processPortfolioChanged({ userId }: { userId: string }) { - Logger.log( - `Portfolio of user '${userId}' has changed`, - 'PortfolioChangedListener' - ); + this.logger.log(`Portfolio of user '${userId}' has changed`); await this.redisCacheService.removePortfolioSnapshotsByUserId({ userId }); } diff --git a/apps/api/src/interceptors/performance-logging/performance-logging.service.ts b/apps/api/src/interceptors/performance-logging/performance-logging.service.ts index 1b1faf8e0..a07783cd9 100644 --- a/apps/api/src/interceptors/performance-logging/performance-logging.service.ts +++ b/apps/api/src/interceptors/performance-logging/performance-logging.service.ts @@ -2,6 +2,8 @@ import { Injectable, Logger } from '@nestjs/common'; @Injectable() export class PerformanceLoggingService { + private readonly logger = new Logger(PerformanceLoggingService.name); + public logPerformance({ className, methodName, @@ -13,7 +15,7 @@ export class PerformanceLoggingService { }) { const endTime = performance.now(); - Logger.debug( + this.logger.debug( `Completed execution of ${methodName}() in ${((endTime - startTime) / 1000).toFixed(3)} seconds`, className ); diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index 94e389f6a..63185a48b 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -23,6 +23,8 @@ import { EnvHttpProxyAgent, setGlobalDispatcher } from 'undici'; import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; +const logger = new Logger('Bootstrap'); + async function bootstrap() { // Respect HTTP_PROXY / HTTPS_PROXY / NO_PROXY for outbound HTTP requests setGlobalDispatcher(new EnvHttpProxyAgent()); @@ -114,20 +116,20 @@ async function bootstrap() { address = `${host}:${addressObject.port}`; } - Logger.log(`Listening at http://${address}`); - Logger.log(''); + logger.log(`Listening at http://${address}`); + logger.log(''); }); } function logLogo() { - Logger.log(' ________ __ ____ ___'); - Logger.log(' / ____/ /_ ____ _____/ /_/ __/___ / (_)___'); - Logger.log(' / / __/ __ \\/ __ \\/ ___/ __/ /_/ __ \\/ / / __ \\'); - Logger.log('/ /_/ / / / / /_/ (__ ) /_/ __/ /_/ / / / /_/ /'); - Logger.log( + logger.log(' ________ __ ____ ___'); + logger.log(' / ____/ /_ ____ _____/ /_/ __/___ / (_)___'); + logger.log(' / / __/ __ \\/ __ \\/ ___/ __/ /_/ __ \\/ / / __ \\'); + logger.log('/ /_/ / / / / /_/ (__ ) /_/ __/ /_/ / / / /_/ /'); + logger.log( `\\____/_/ /_/\\____/____/\\__/_/ \\____/_/_/\\____/ ${environment.version}` ); - Logger.log(''); + logger.log(''); } bootstrap(); diff --git a/apps/api/src/middlewares/html-template.middleware.ts b/apps/api/src/middlewares/html-template.middleware.ts index 2b8820e81..c256ada56 100644 --- a/apps/api/src/middlewares/html-template.middleware.ts +++ b/apps/api/src/middlewares/html-template.middleware.ts @@ -92,6 +92,8 @@ const locales = { @Injectable() export class HtmlTemplateMiddleware implements NestMiddleware { + private readonly logger = new Logger(HtmlTemplateMiddleware.name); + private indexHtmlMap: { [languageCode: string]: string } = {}; public constructor(private readonly i18nService: I18nService) { @@ -107,11 +109,7 @@ export class HtmlTemplateMiddleware implements NestMiddleware { {} ); } catch (error) { - Logger.error( - 'Failed to initialize index HTML map', - error, - 'HTMLTemplateMiddleware' - ); + this.logger.error('Failed to initialize index HTML map', error); } } diff --git a/apps/api/src/services/benchmark/benchmark.service.ts b/apps/api/src/services/benchmark/benchmark.service.ts index 4b1d9a65f..022a0e928 100644 --- a/apps/api/src/services/benchmark/benchmark.service.ts +++ b/apps/api/src/services/benchmark/benchmark.service.ts @@ -28,6 +28,8 @@ import { BenchmarkValue } from './interfaces/benchmark-value.interface'; @Injectable() export class BenchmarkService { + private readonly logger = new Logger(BenchmarkService.name); + private readonly CACHE_KEY_BENCHMARKS = 'BENCHMARKS'; public constructor( @@ -87,7 +89,7 @@ export class BenchmarkService { const { benchmarks, expiration }: BenchmarkValue = JSON.parse(cachedBenchmarkValue); - Logger.debug('Fetched benchmarks from cache', 'BenchmarkService'); + this.logger.debug('Fetched benchmarks from cache'); if (isAfter(new Date(), new Date(expiration))) { this.calculateAndCacheBenchmarks({ @@ -227,7 +229,7 @@ export class BenchmarkService { private async calculateAndCacheBenchmarks({ enableSharing = false }): Promise { - Logger.debug('Calculate benchmarks', 'BenchmarkService'); + this.logger.debug('Calculate benchmarks'); const benchmarkAssetProfiles = await this.getBenchmarkAssetProfiles({ enableSharing diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index b01ba177b..5d6ed79aa 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -29,6 +29,8 @@ import { format, fromUnixTime, getUnixTime } from 'date-fns'; @Injectable() export class CoinGeckoService implements DataProviderInterface, OnModuleInit { + private readonly logger = new Logger(CoinGeckoService.name); + private apiUrl: string; private headers: HeadersInit = {}; @@ -88,7 +90,7 @@ export class CoinGeckoService implements DataProviderInterface, OnModuleInit { ).toFixed(3)} seconds`; } - Logger.error(message, 'CoinGeckoService'); + this.logger.error(message); } return response; @@ -214,7 +216,7 @@ export class CoinGeckoService implements DataProviderInterface, OnModuleInit { ).toFixed(3)} seconds`; } - Logger.error(message, 'CoinGeckoService'); + this.logger.error(message); } return response; @@ -262,7 +264,7 @@ export class CoinGeckoService implements DataProviderInterface, OnModuleInit { ).toFixed(3)} seconds`; } - Logger.error(message, 'CoinGeckoService'); + this.logger.error(message); } return { items }; diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index eeccf725e..a74aaeb46 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -11,6 +11,8 @@ import { countries } from 'countries-list'; @Injectable() export class TrackinsightDataEnhancerService implements DataEnhancerInterface { + private readonly logger = new Logger(TrackinsightDataEnhancerService.name); + private static baseUrl = 'https://www.trackinsight.com/data-api'; private static countriesMapping = { 'Russian Federation': 'Russia', @@ -209,9 +211,8 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { return undefined; }) .catch(({ message }) => { - Logger.error( - `Failed to search Trackinsight symbol for ${symbol} (${message})`, - 'TrackinsightDataEnhancerService' + this.logger.error( + `Failed to search Trackinsight symbol for ${symbol} (${message})` ); return undefined; diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 30ad81c09..034916a5f 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -23,6 +23,8 @@ import type { Price } from 'yahoo-finance2/esm/src/modules/quoteSummary-iface'; @Injectable() export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { + private readonly logger = new Logger(YahooFinanceDataEnhancerService.name); + private readonly yahooFinance = new YahooFinance({ suppressNotices: ['yahooSurvey'] }); @@ -123,7 +125,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { response.url = url; } } catch (error) { - Logger.error(error, 'YahooFinanceDataEnhancerService'); + this.logger.error(error); } return response; @@ -266,7 +268,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { `No data found, ${aSymbol} (${this.getName()}) may be delisted` ); } else { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); } } diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 5f0a6928a..1ea2d6436 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -41,6 +41,8 @@ import { AssetProfileInvalidError } from './errors/asset-profile-invalid.error'; @Injectable() export class DataProviderService implements OnModuleInit { + private readonly logger = new Logger(DataProviderService.name); + private dataProviderMapping: { [dataProviderName: string]: string }; public constructor( @@ -129,7 +131,7 @@ export class DataProviderService implements OnModuleInit { ); } } catch (error) { - Logger.error(error, 'DataProviderService'); + this.logger.error(error); throw error; } @@ -391,7 +393,7 @@ export class DataProviderService implements OnModuleInit { return r; }, {}); } catch (error) { - Logger.error(error, 'DataProviderService'); + this.logger.error(error); } finally { return response; } @@ -503,7 +505,7 @@ export class DataProviderService implements OnModuleInit { result[symbol] = data; } } catch (error) { - Logger.error(error, 'DataProviderService'); + this.logger.error(error); throw error; } @@ -567,13 +569,12 @@ export class DataProviderService implements OnModuleInit { const numberOfItemsInCache = Object.keys(response)?.length; if (numberOfItemsInCache) { - Logger.debug( + this.logger.debug( `Fetched ${numberOfItemsInCache} quote${ numberOfItemsInCache > 1 ? 's' : '' } from cache in ${((performance.now() - startTimeTotal) / 1000).toFixed( 3 - )} seconds`, - 'DataProviderService' + )} seconds` ); } @@ -684,14 +685,13 @@ export class DataProviderService implements OnModuleInit { } } - Logger.debug( + this.logger.debug( `Fetched ${symbolsChunk.length} quote${ symbolsChunk.length > 1 ? 's' : '' } from ${dataSource} in ${( (performance.now() - startTimeDataSource) / 1000 - ).toFixed(3)} seconds`, - 'DataProviderService' + ).toFixed(3)} seconds` ); try { @@ -722,15 +722,18 @@ export class DataProviderService implements OnModuleInit { await Promise.all(promises); - Logger.debug('--------------------------------------------------------'); - Logger.debug( + this.logger.debug( + '--------------------------------------------------------' + ); + this.logger.debug( `Fetched ${items.length} quote${items.length > 1 ? 's' : ''} in ${( (performance.now() - startTimeTotal) / 1000 - ).toFixed(3)} seconds`, - 'DataProviderService' + ).toFixed(3)} seconds` + ); + this.logger.debug( + '========================================================' ); - Logger.debug('========================================================'); return response; } diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 3fa38842b..06173c25b 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -37,6 +37,8 @@ import { isNumber } from 'lodash'; export class EodHistoricalDataService implements DataProviderInterface, OnModuleInit { + private readonly logger = new Logger(EodHistoricalDataService.name); + private apiKey: string; private readonly URL = 'https://eodhistoricaldata.com/api'; @@ -127,12 +129,11 @@ export class EodHistoricalDataService return response; } catch (error) { - Logger.error( + this.logger.error( `Could not get dividends for ${symbol} (${this.getName()}) from ${format( from, DATE_FORMAT - )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, - 'EodHistoricalDataService' + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}` ); return {}; @@ -172,9 +173,8 @@ export class EodHistoricalDataService marketPrice: adjusted_close }; } else { - Logger.error( - `Could not get historical market data for ${symbol} (${this.getName()}) at ${date}`, - 'EodHistoricalDataService' + this.logger.error( + `Could not get historical market data for ${symbol} (${this.getName()}) at ${date}` ); } @@ -292,9 +292,8 @@ export class EodHistoricalDataService dataSource: this.getName() }; } else { - Logger.error( - `Could not get quote for ${this.convertFromEodSymbol(code)} (${this.getName()})`, - 'EodHistoricalDataService' + this.logger.error( + `Could not get quote for ${this.convertFromEodSymbol(code)} (${this.getName()})` ); } } @@ -311,7 +310,7 @@ export class EodHistoricalDataService ).toFixed(3)} seconds`; } - Logger.error(message, 'EodHistoricalDataService'); + this.logger.error(message); } return {}; @@ -465,7 +464,7 @@ export class EodHistoricalDataService ).toFixed(3)} seconds`; } - Logger.error(message, 'EodHistoricalDataService'); + this.logger.error(message); } return searchResult; diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index fa36a0d17..80eeadeb0 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -49,6 +49,8 @@ import { uniqBy } from 'lodash'; export class FinancialModelingPrepService implements DataProviderInterface, OnModuleInit { + private readonly logger = new Logger(FinancialModelingPrepService.name); + private static countriesMapping = { 'Korea (the Republic of)': 'South Korea', 'Russian Federation': 'Russia', @@ -265,7 +267,7 @@ export class FinancialModelingPrepService ).toFixed(3)} seconds`; } - Logger.error(message, 'FinancialModelingPrepService'); + this.logger.error(message); } return response; @@ -325,12 +327,11 @@ export class FinancialModelingPrepService return response; } catch (error) { - Logger.error( + this.logger.error( `Could not get dividends for ${symbol} (${this.getName()}) from ${format( from, DATE_FORMAT - )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, - 'FinancialModelingPrepService' + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}` ); return {}; @@ -518,7 +519,7 @@ export class FinancialModelingPrepService ).toFixed(3)} seconds`; } - Logger.error(message, 'FinancialModelingPrepService'); + this.logger.error(message); } return response; @@ -638,7 +639,7 @@ export class FinancialModelingPrepService ).toFixed(3)} seconds`; } - Logger.error(message, 'FinancialModelingPrepService'); + this.logger.error(message); } return { items }; diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index 2f2601d5d..2b91855a6 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -33,6 +33,8 @@ import { StatusCodes } from 'http-status-codes'; @Injectable() export class GhostfolioService implements DataProviderInterface { + private readonly logger = new Logger(GhostfolioService.name); + private readonly URL = environment.production ? 'https://ghostfol.io/api' : `${this.configurationService.get('ROOT_URL')}/api`; @@ -89,7 +91,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return assetProfile; @@ -154,7 +156,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return dividends; @@ -211,7 +213,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(error.message, 'GhostfolioService'); + this.logger.error(error.message); throw new Error( `Could not get historical market data for ${symbol} (${this.getName()}) from ${format( @@ -283,7 +285,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return quotes; @@ -338,7 +340,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return searchResult; diff --git a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts index ba1e5bbe5..13f671bd4 100644 --- a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts +++ b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts @@ -24,6 +24,8 @@ import { GoogleSpreadsheet } from 'google-spreadsheet'; @Injectable() export class GoogleSheetsService implements DataProviderInterface { + private readonly logger = new Logger(GoogleSheetsService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly prismaService: PrismaService, @@ -144,7 +146,7 @@ export class GoogleSheetsService implements DataProviderInterface { return response; } catch (error) { - Logger.error(error, 'GoogleSheetsService'); + this.logger.error(error); } return {}; diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 11e0aae6a..87e116dda 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -31,6 +31,8 @@ import { addDays, format, isBefore } from 'date-fns'; @Injectable() export class ManualService implements DataProviderInterface { + private readonly logger = new Logger(ManualService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly fetchService: FetchService, @@ -181,9 +183,8 @@ export class ManualService implements DataProviderInterface { }); return { marketPrice, symbol }; } catch (error) { - Logger.error( - `Could not get quote for ${symbol} (${this.getName()}): [${error.name}] ${error.message}`, - 'ManualService' + this.logger.error( + `Could not get quote for ${symbol} (${this.getName()}): [${error.name}] ${error.message}` ); return { symbol, marketPrice: undefined }; } @@ -216,7 +217,7 @@ export class ManualService implements DataProviderInterface { return response; } catch (error) { - Logger.error(error, 'ManualService'); + this.logger.error(error); } return {}; diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 22896cccc..9941ae9eb 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -26,6 +26,8 @@ import { format } from 'date-fns'; @Injectable() export class RapidApiService implements DataProviderInterface { + private readonly logger = new Logger(RapidApiService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly fetchService: FetchService @@ -122,7 +124,7 @@ export class RapidApiService implements DataProviderInterface { }; } } catch (error) { - Logger.error(error, 'RapidApiService'); + this.logger.error(error); } return {}; @@ -167,7 +169,7 @@ export class RapidApiService implements DataProviderInterface { ).toFixed(3)} seconds`; } - Logger.error(message, 'RapidApiService'); + this.logger.error(message); return undefined; } diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index de8807098..93949ebc0 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -41,6 +41,8 @@ import { SearchQuoteNonYahoo } from 'yahoo-finance2/esm/src/modules/search'; @Injectable() export class YahooFinanceService implements DataProviderInterface { + private readonly logger = new Logger(YahooFinanceService.name); + private readonly yahooFinance = new YahooFinance({ suppressNotices: ['yahooSurvey'] }); @@ -105,12 +107,11 @@ export class YahooFinanceService implements DataProviderInterface { return response; } catch (error) { - Logger.error( + this.logger.error( `Could not get dividends for ${symbol} (${this.getName()}) from ${format( from, DATE_FORMAT - )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, - 'YahooFinanceService' + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}` ); return {}; @@ -198,12 +199,9 @@ export class YahooFinanceService implements DataProviderInterface { try { quotes = await this.yahooFinance.quote(yahooFinanceSymbols); } catch (error) { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); - Logger.warn( - 'Fallback to yahooFinance.quoteSummary()', - 'YahooFinanceService' - ); + this.logger.warn('Fallback to yahooFinance.quoteSummary()'); quotes = await this.getQuotesWithQuoteSummary(yahooFinanceSymbols); } @@ -229,7 +227,7 @@ export class YahooFinanceService implements DataProviderInterface { return response; } catch (error) { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); return {}; } @@ -334,7 +332,7 @@ export class YahooFinanceService implements DataProviderInterface { }); } } catch (error) { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); } return { items }; @@ -365,10 +363,7 @@ export class YahooFinanceService implements DataProviderInterface { .filter( (result): result is PromiseFulfilledResult => { if (result.status === 'rejected') { - Logger.error( - `Could not get quote summary: ${result.reason}`, - 'YahooFinanceService' - ); + this.logger.error(`Could not get quote summary: ${result.reason}`); return false; } diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts index 024bdf4e1..708bfa591 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts @@ -30,6 +30,8 @@ import { ExchangeRatesByCurrency } from './interfaces/exchange-rate-data.interfa @Injectable() export class ExchangeRateDataService { + private readonly logger = new Logger(ExchangeRateDataService.name); + private currencies: string[] = []; private currencyPairs: DataGatheringItem[] = []; private derivedCurrencyFactors: { [currencyPair: string]: number } = {}; @@ -110,9 +112,8 @@ export class ExchangeRateDataService { previousExchangeRate; if (currency === DEFAULT_CURRENCY && isBefore(date, new Date())) { - Logger.error( - `No exchange rate has been found for ${currency}${targetCurrency} at ${dateString}`, - 'ExchangeRateDataService' + this.logger.error( + `No exchange rate has been found for ${currency}${targetCurrency} at ${dateString}` ); } } else { @@ -253,9 +254,8 @@ export class ExchangeRateDataService { } // Fallback with error, if currencies are not available - Logger.error( - `No exchange rate has been found for ${aFromCurrency}${aToCurrency}`, - 'ExchangeRateDataService' + this.logger.error( + `No exchange rate has been found for ${aFromCurrency}${aToCurrency}` ); return aValue; @@ -341,12 +341,11 @@ export class ExchangeRateDataService { return factor * aValue; } - Logger.error( + this.logger.error( `No exchange rate has been found for ${aFromCurrency}${aToCurrency} at ${format( aDate, DATE_FORMAT - )}`, - 'ExchangeRateDataService' + )}` ); return undefined; @@ -483,7 +482,7 @@ export class ExchangeRateDataService { errorMessage = `${errorMessage} and ${DEFAULT_CURRENCY}${currencyTo}`; } - Logger.error(`${errorMessage}.`, 'ExchangeRateDataService'); + this.logger.error(`${errorMessage}.`); } } } diff --git a/apps/api/src/services/fetch/fetch.service.ts b/apps/api/src/services/fetch/fetch.service.ts index f32e56a1c..31034f81c 100644 --- a/apps/api/src/services/fetch/fetch.service.ts +++ b/apps/api/src/services/fetch/fetch.service.ts @@ -15,6 +15,8 @@ import { WebFetchRoute } from './interfaces/web-fetch-route.interface'; @Injectable() export class FetchService implements OnModuleInit { + private readonly logger = new Logger(FetchService.name); + private static readonly REDACTED_QUERY_PARAM_NAMES = ['apikey', 'api_token']; private static readonly WEB_FETCH_TIMEOUT = ms('30 seconds'); @@ -39,7 +41,7 @@ export class FetchService implements OnModuleInit { const url = input instanceof Request ? input.url : input.toString(); const urlRedacted = this.redactUrl(url); - Logger.debug(`${method} ${urlRedacted}`, 'FetchService'); + this.logger.debug(`${method} ${urlRedacted}`); if (method === 'GET') { const webFetchRoute = this.getMatchingWebFetchRoute(url); @@ -60,15 +62,11 @@ export class FetchService implements OnModuleInit { return await globalThis.fetch(input, init); } catch (error) { if (error instanceof Error) { - Logger.error( - `${method} ${urlRedacted} failed: [${error.name}] ${error.message}`, - 'FetchService' + this.logger.error( + `${method} ${urlRedacted} failed: [${error.name}] ${error.message}` ); } else { - Logger.error( - `${method} ${urlRedacted} failed: ${String(error)}`, - 'FetchService' - ); + this.logger.error(`${method} ${urlRedacted} failed: ${String(error)}`); } throw error; @@ -145,10 +143,7 @@ export class FetchService implements OnModuleInit { } } - Logger.debug( - `Routed ${this.redactUrl(url)} via web fetch tool`, - 'FetchService' - ); + this.logger.debug(`Routed ${this.redactUrl(url)} via web fetch tool`); return new Response(body, { headers: webFetchRoute.responseContentType @@ -159,11 +154,10 @@ export class FetchService implements OnModuleInit { return undefined; } catch (error) { - Logger.error( + this.logger.error( `Web fetch tool failed for ${this.redactUrl(url)}: ${ error instanceof Error ? error.message : String(error) - }`, - 'FetchService' + }` ); return undefined; diff --git a/apps/api/src/services/i18n/i18n.service.ts b/apps/api/src/services/i18n/i18n.service.ts index 1cdb811a9..65c51b2f0 100644 --- a/apps/api/src/services/i18n/i18n.service.ts +++ b/apps/api/src/services/i18n/i18n.service.ts @@ -7,6 +7,8 @@ import { join } from 'node:path'; @Injectable() export class I18nService implements OnModuleInit { + private readonly logger = new Logger(I18nService.name); + private localesPath = join(__dirname, 'assets', 'locales'); private translations: { [locale: string]: cheerio.CheerioAPI } = {}; @@ -26,7 +28,7 @@ export class I18nService implements OnModuleInit { const $ = this.translations[languageCode]; if (!$) { - Logger.warn(`Translation not found for locale '${languageCode}'`); + this.logger.warn(`Translation not found for locale '${languageCode}'`); } let translatedText = $( @@ -36,7 +38,7 @@ export class I18nService implements OnModuleInit { ).text(); if (!translatedText) { - Logger.warn( + this.logger.warn( `Translation not found for id '${id}' in locale '${languageCode}'` ); } @@ -60,7 +62,7 @@ export class I18nService implements OnModuleInit { this.parseXml(xmlData); } } catch (error) { - Logger.error(error, 'I18nService'); + this.logger.error(error); } } diff --git a/apps/api/src/services/prisma/prisma.service.ts b/apps/api/src/services/prisma/prisma.service.ts index cdbc1cdfd..ebbd3afd4 100644 --- a/apps/api/src/services/prisma/prisma.service.ts +++ b/apps/api/src/services/prisma/prisma.service.ts @@ -14,6 +14,8 @@ export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + private readonly logger = new Logger(PrismaService.name); + public constructor(configService: ConfigService) { const adapter = new PrismaPg({ connectionString: configService.get('DATABASE_URL') @@ -43,7 +45,7 @@ export class PrismaService try { await this.$connect(); } catch (error) { - Logger.error(error, 'PrismaService'); + this.logger.error(error); } } diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts index 1a4038652..ee5cb838a 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts @@ -32,6 +32,8 @@ import { DataGatheringService } from './data-gathering.service'; @Injectable() @Processor(DATA_GATHERING_QUEUE) export class DataGatheringProcessor { + private readonly logger = new Logger(DataGatheringProcessor.name); + public constructor( private readonly dataGatheringService: DataGatheringService, private readonly dataProviderService: DataProviderService, @@ -51,16 +53,14 @@ export class DataGatheringProcessor { const { dataSource, symbol } = job.data; try { - Logger.log( - `Asset profile data gathering has been started for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` + this.logger.log( + `Asset profile data gathering has been started for ${symbol} (${dataSource})` ); await this.dataGatheringService.gatherAssetProfiles([job.data]); - Logger.log( - `Asset profile data gathering has been completed for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` + this.logger.log( + `Asset profile data gathering has been completed for ${symbol} (${dataSource})` ); } catch (error) { if (error instanceof AssetProfileDelistedError) { @@ -74,18 +74,14 @@ export class DataGatheringProcessor { } ); - Logger.log( - `Asset profile data gathering has been discarded for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` + this.logger.log( + `Asset profile data gathering has been discarded for ${symbol} (${dataSource})` ); return job.discard(); } - Logger.error( - error, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` - ); + this.logger.error(error); throw error; } @@ -105,12 +101,11 @@ export class DataGatheringProcessor { try { let currentDate = parseISO(date as unknown as string); - Logger.log( + this.logger.log( `Historical market data gathering has been started for ${symbol} (${dataSource}) at ${format( currentDate, DATE_FORMAT - )}${force ? ' (forced update)' : ''}`, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` + )}${force ? ' (forced update)' : ''}` ); const historicalData = await this.dataProviderService.getHistoricalRaw({ @@ -167,12 +162,11 @@ export class DataGatheringProcessor { await this.marketDataService.updateMany({ data }); } - Logger.log( + this.logger.log( `Historical market data gathering has been completed for ${symbol} (${dataSource}) at ${format( currentDate, DATE_FORMAT - )}`, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` + )}` ); } catch (error) { if (error instanceof AssetProfileDelistedError) { @@ -186,18 +180,14 @@ export class DataGatheringProcessor { } ); - Logger.log( - `Historical market data gathering has been discarded for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` + this.logger.log( + `Historical market data gathering has been discarded for ${symbol} (${dataSource})` ); return job.discard(); } - Logger.error( - error, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` - ); + this.logger.error(error); throw error; } diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index cec63c3eb..51f609d22 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -34,6 +34,8 @@ import ms, { StringValue } from 'ms'; @Injectable() export class DataGatheringService { + private readonly logger = new Logger(DataGatheringService.name); + public constructor( @Inject('DataEnhancers') private readonly dataEnhancers: DataEnhancerInterface[], @@ -145,7 +147,7 @@ export class DataGatheringService { }); } } catch (error) { - Logger.error(error, 'DataGatheringService'); + this.logger.error(error); } finally { return undefined; } @@ -187,12 +189,11 @@ export class DataGatheringService { symbol: symbolMapping?.[dataEnhancer.getName()] ?? symbol }); } catch (error) { - Logger.error( + this.logger.error( `Failed to enhance data for ${symbol} (${ assetProfile.dataSource }) by ${dataEnhancer.getName()}`, - error, - 'DataGatheringService' + error ); } } @@ -256,11 +257,7 @@ export class DataGatheringService { } }); } catch (error) { - Logger.error( - `${symbol}: ${error?.meta?.cause}`, - error, - 'DataGatheringService' - ); + this.logger.error(`${symbol}: ${error?.meta?.cause}`, error); if (assetProfileIdentifiers.length === 1) { throw error; diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts index f3aa6e77e..cf94a9d2b 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts @@ -21,6 +21,8 @@ import { PortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue @Injectable() @Processor(PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE) export class PortfolioSnapshotProcessor { + private readonly logger = new Logger(PortfolioSnapshotProcessor.name); + public constructor( private readonly accountBalanceService: AccountBalanceService, private readonly activitiesService: ActivitiesService, @@ -41,9 +43,8 @@ export class PortfolioSnapshotProcessor { try { const startTime = performance.now(); - Logger.log( - `Portfolio snapshot calculation of user '${job.data.userId}' has been started`, - `PortfolioSnapshotProcessor (${PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME})` + this.logger.log( + `Portfolio snapshot calculation of user '${job.data.userId}' has been started` ); const { activities } = @@ -72,12 +73,11 @@ export class PortfolioSnapshotProcessor { const snapshot = await portfolioCalculator.computeSnapshot(); - Logger.log( + this.logger.log( `Portfolio snapshot calculation of user '${job.data.userId}' has been completed in ${( (performance.now() - startTime) / 1000 - ).toFixed(3)} seconds`, - `PortfolioSnapshotProcessor (${PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME})` + ).toFixed(3)} seconds` ); const expiration = addMilliseconds( @@ -101,10 +101,7 @@ export class PortfolioSnapshotProcessor { return snapshot; } catch (error) { - Logger.error( - error, - `PortfolioSnapshotProcessor (${PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME})` - ); + this.logger.error(error); throw new Error(error); } diff --git a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts index a523ef4f2..7eefc101f 100644 --- a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts +++ b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts @@ -27,6 +27,8 @@ import { format, subDays } from 'date-fns'; @Injectable() @Processor(STATISTICS_GATHERING_QUEUE) export class StatisticsGatheringProcessor { + private readonly logger = new Logger(StatisticsGatheringProcessor.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly fetchService: FetchService, @@ -35,10 +37,7 @@ export class StatisticsGatheringProcessor { @Process(GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME) public async gatherDockerHubPullsStatistics() { - Logger.log( - 'Docker Hub pulls statistics gathering has been started', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Docker Hub pulls statistics gathering has been started'); const dockerHubPulls = await this.countDockerHubPulls(); @@ -47,17 +46,13 @@ export class StatisticsGatheringProcessor { value: String(dockerHubPulls) }); - Logger.log( - 'Docker Hub pulls statistics gathering has been completed', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Docker Hub pulls statistics gathering has been completed'); } @Process(GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME) public async gatherGitHubContributorsStatistics() { - Logger.log( - 'GitHub contributors statistics gathering has been started', - 'StatisticsGatheringProcessor' + this.logger.log( + 'GitHub contributors statistics gathering has been started' ); const gitHubContributors = await this.countGitHubContributors(); @@ -67,18 +62,14 @@ export class StatisticsGatheringProcessor { value: String(gitHubContributors) }); - Logger.log( - 'GitHub contributors statistics gathering has been completed', - 'StatisticsGatheringProcessor' + this.logger.log( + 'GitHub contributors statistics gathering has been completed' ); } @Process(GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME) public async gatherGitHubStargazersStatistics() { - Logger.log( - 'GitHub stargazers statistics gathering has been started', - 'StatisticsGatheringProcessor' - ); + this.logger.log('GitHub stargazers statistics gathering has been started'); const gitHubStargazers = await this.countGitHubStargazers(); @@ -87,9 +78,8 @@ export class StatisticsGatheringProcessor { value: String(gitHubStargazers) }); - Logger.log( - 'GitHub stargazers statistics gathering has been completed', - 'StatisticsGatheringProcessor' + this.logger.log( + 'GitHub stargazers statistics gathering has been completed' ); } @@ -100,18 +90,14 @@ export class StatisticsGatheringProcessor { ); if (!monitorId) { - Logger.log( - `Uptime statistics gathering has been skipped as no ${PROPERTY_BETTER_UPTIME_MONITOR_ID} is configured`, - 'StatisticsGatheringProcessor' + this.logger.log( + `Uptime statistics gathering has been skipped as no ${PROPERTY_BETTER_UPTIME_MONITOR_ID} is configured` ); return; } - Logger.log( - 'Uptime statistics gathering has been started', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Uptime statistics gathering has been started'); const uptime = await this.getUptime(monitorId); @@ -120,10 +106,7 @@ export class StatisticsGatheringProcessor { value: String(uptime) }); - Logger.log( - 'Uptime statistics gathering has been completed', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Uptime statistics gathering has been completed'); } private async countDockerHubPulls(): Promise { @@ -139,7 +122,7 @@ export class StatisticsGatheringProcessor { return pull_count; } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - DockerHub'); + this.logger.error(error); throw error; } @@ -169,7 +152,7 @@ export class StatisticsGatheringProcessor { value }); } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - GitHub'); + this.logger.error(error); throw error; } @@ -188,7 +171,7 @@ export class StatisticsGatheringProcessor { return stargazers_count; } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - GitHub'); + this.logger.error(error); throw error; } @@ -217,7 +200,7 @@ export class StatisticsGatheringProcessor { return data.attributes.availability / 100; } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - Better Stack'); + this.logger.error(error); throw error; } diff --git a/apps/api/src/services/twitter-bot/twitter-bot.service.ts b/apps/api/src/services/twitter-bot/twitter-bot.service.ts index b424f7198..ffd0c5452 100644 --- a/apps/api/src/services/twitter-bot/twitter-bot.service.ts +++ b/apps/api/src/services/twitter-bot/twitter-bot.service.ts @@ -16,6 +16,8 @@ import { TwitterApi, TwitterApiReadWrite } from 'twitter-api-v2'; @Injectable() export class TwitterBotService implements OnModuleInit { + private readonly logger = new Logger(TwitterBotService.name); + private twitterClient: TwitterApiReadWrite; public constructor( @@ -71,13 +73,12 @@ export class TwitterBotService implements OnModuleInit { const { data: createdTweet } = await this.twitterClient.v2.tweet(status); - Logger.log( - `Fear & Greed Index has been posted: https://x.com/ghostfolio_/status/${createdTweet.id}`, - 'TwitterBotService' + this.logger.log( + `Fear & Greed Index has been posted: https://x.com/ghostfolio_/status/${createdTweet.id}` ); } } catch (error) { - Logger.error(error, 'TwitterBotService'); + this.logger.error(error); } } From c6a2741cb16dc46e00af7637755bb2476b0bee19 Mon Sep 17 00:00:00 2001 From: Punith R Date: Sat, 6 Jun 2026 13:05:55 +0530 Subject: [PATCH 05/42] Task/improve language localization for uk (#6978) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.uk.xlf | 94 ++++++++++++------------- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35ca028a3..6310292f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Refactored the backend logging to use the instance-based `Logger` +- Improved the language localization for Ukrainian (`uk`) ### Fixed diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index edc28f604..94dc7e52a 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -292,7 +292,7 @@ please - please + будь ласка apps/client/src/app/pages/pricing/pricing-page.html 333 @@ -360,7 +360,7 @@ with - with + з apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 87 @@ -1388,7 +1388,7 @@ By - By + До apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -1892,7 +1892,7 @@ Indonesia - Indonesia + Індонезія libs/ui/src/lib/i18n.ts 90 @@ -2108,7 +2108,7 @@ Code - Code + Код apps/client/src/app/components/admin-overview/admin-overview.html 159 @@ -2636,7 +2636,7 @@ Argentina - Argentina + Аргентина libs/ui/src/lib/i18n.ts 78 @@ -3204,7 +3204,7 @@ for - for + для apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 128 @@ -3560,7 +3560,7 @@ Duration - Duration + Тривалість apps/client/src/app/components/admin-overview/admin-overview.html 172 @@ -4897,7 +4897,7 @@ here - here + тут apps/client/src/app/pages/pricing/pricing-page.html 347 @@ -5113,7 +5113,7 @@ Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover operational costs for the hosting infrastructure and professional data providers, and to fund ongoing development. - Наша офіційна хмарна пропозиція Ghostfolio Premium - це найпростіший спосіб почати роботу. Завдяки економії часу, це буде найкращим варіантом для більшості людей. Доходи використовуються для покриття витрат на хостинг-інфраструктуру та фінансування постійної розробки. + Наша офіційна хмарна пропозиція Ghostfolio Premium - це найпростіший спосіб почати роботу. Завдяки економії часу, це буде найкращим варіантом для більшості людей. Доходи використовуються для покриття витрат на хостинг-інфраструктуру та фінансування постійної розробки. apps/client/src/app/pages/pricing/pricing-page.html 7 @@ -6392,7 +6392,7 @@ Loan - Loan + Позика libs/ui/src/lib/i18n.ts 58 @@ -6944,7 +6944,7 @@ Role - Role + Роль apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 39 @@ -7080,7 +7080,7 @@ Authentication - Authentication + Автентифікація apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 60 @@ -7476,7 +7476,7 @@ Lazy - Lazy + Лінивий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 235 @@ -7484,7 +7484,7 @@ Instant - Instant + Миттєвий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 239 @@ -7500,7 +7500,7 @@ Mode - Mode + Режим apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 519 @@ -7508,7 +7508,7 @@ Selector - Selector + Селектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 535 @@ -7532,7 +7532,7 @@ real-time - real-time + реальний час apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 239 @@ -7548,7 +7548,7 @@ Create - Create + Створити libs/ui/src/lib/tags-selector/tags-selector.component.html 50 @@ -7556,7 +7556,7 @@ Change - Change + Змінити libs/ui/src/lib/holdings-table/holdings-table.component.html 138 @@ -7568,7 +7568,7 @@ Performance - Performance + Дохідність apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 6 @@ -7624,7 +7624,7 @@ Armenia - Armenia + Вірменія libs/ui/src/lib/i18n.ts 77 @@ -7640,7 +7640,7 @@ Singapore - Singapore + Сінгапур libs/ui/src/lib/i18n.ts 97 @@ -7672,7 +7672,7 @@ Continue - Continue + Продовжити apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 57 @@ -7732,7 +7732,7 @@ terms-of-service - terms-of-service + umovy-nadannia-posluh kebab-case libs/common/src/lib/routes/routes.ts @@ -7781,7 +7781,7 @@ Apply - Apply + Застосувати apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 154 @@ -7837,7 +7837,7 @@ someone - someone + когось apps/client/src/app/pages/public/public-page.component.ts 62 @@ -7853,7 +7853,7 @@ Watchlist - Watchlist + Список спостереження apps/client/src/app/components/home-watchlist/home-watchlist.html 4 @@ -7897,7 +7897,7 @@ changelog - changelog + zhurnal-zmin kebab-case libs/common/src/lib/routes/routes.ts @@ -8030,7 +8030,7 @@ personal-finance-tools - personal-finance-tools + instrumenty-osobystykh-finansiv kebab-case libs/common/src/lib/routes/routes.ts @@ -8047,7 +8047,7 @@ markets - markets + rynky kebab-case libs/common/src/lib/routes/routes.ts @@ -8108,7 +8108,7 @@ Available - Available + Доступно apps/client/src/app/components/data-provider-status/data-provider-status.component.html 3 @@ -8116,7 +8116,7 @@ Unavailable - Unavailable + Недоступно apps/client/src/app/components/data-provider-status/data-provider-status.component.html 5 @@ -8132,7 +8132,7 @@ new - new + новий apps/client/src/app/components/admin-settings/admin-settings.component.html 79 @@ -8140,7 +8140,7 @@ Investment - Investment + Інвестиція apps/client/src/app/pages/i18n/i18n-page.html 15 @@ -8164,7 +8164,7 @@ Equity - Equity + Акції apps/client/src/app/pages/i18n/i18n-page.html 41 @@ -8252,7 +8252,7 @@ Investment - Investment + Інвестиція apps/client/src/app/pages/i18n/i18n-page.html 95 @@ -8276,7 +8276,7 @@ start - start + pochatok kebab-case libs/common/src/lib/routes/routes.ts @@ -8297,7 +8297,7 @@ Generate - Generate + Згенерувати apps/client/src/app/components/user-account-access/user-account-access.html 45 @@ -8313,7 +8313,7 @@ Stocks - Stocks + Акції apps/client/src/app/components/markets/markets.component.ts 51 @@ -8325,7 +8325,7 @@ Cryptocurrencies - Cryptocurrencies + Криптовалюти apps/client/src/app/components/markets/markets.component.ts 52 @@ -8361,7 +8361,7 @@ Collectible - Collectible + Колекційний предмет libs/ui/src/lib/i18n.ts 55 @@ -8421,7 +8421,7 @@ Fees - Fees + Комісії apps/client/src/app/pages/i18n/i18n-page.html 161 @@ -8429,7 +8429,7 @@ Liquidity - Liquidity + Ліквідність apps/client/src/app/pages/i18n/i18n-page.html 70 @@ -8565,7 +8565,7 @@ Asia-Pacific - Asia-Pacific + Азіатсько-Тихоокеанський регіон apps/client/src/app/pages/i18n/i18n-page.html 165 @@ -8629,7 +8629,7 @@ Europe - Europe + Європа apps/client/src/app/pages/i18n/i18n-page.html 195 @@ -8661,7 +8661,7 @@ Japan - Japan + Японія apps/client/src/app/pages/i18n/i18n-page.html 209 From be874f62e3ad6626606cb9d86ad9bf40843ee4e7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 12:17:50 +0200 Subject: [PATCH 06/42] Task/centralize asset profile override logic (#6991) * Centralize asset profile logic * Update changelog --- CHANGELOG.md | 2 + apps/api/src/app/admin/admin.service.ts | 110 +++++++----------- .../data-gathering/data-gathering.service.ts | 29 +++-- .../symbol-profile/symbol-profile.service.ts | 60 +++------- libs/common/src/lib/helper.ts | 45 ++++++- 5 files changed, 124 insertions(+), 122 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6310292f9..5f713f736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Centralized the asset profile override logic for manual adjustments - Refactored the backend logging to use the instance-based `Logger` - Improved the language localization for Ukrainian (`uk`) ### Fixed +- Fixed an issue where the asset profile override (asset class and asset sub class) was not applied to the data enhancers when gathering asset profiles - Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles ## 3.7.0 - 2026-06-02 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 0bf5c3925..948616d6c 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -14,6 +14,7 @@ import { PROPERTY_IS_USER_SIGNUP_ENABLED } from '@ghostfolio/common/config'; import { + applyAssetProfileOverrides, getAssetProfileIdentifier, getCurrencyFromSymbol, isCurrency @@ -29,7 +30,6 @@ import { EnhancedSymbolProfile, Filter } from '@ghostfolio/common/interfaces'; -import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { MarketDataPreset } from '@ghostfolio/common/types'; import { @@ -349,87 +349,61 @@ export class AdminService { } let marketData: AdminMarketDataItem[] = await Promise.all( - assetProfiles.map( - async ({ + assetProfiles.map(async (assetProfile) => { + const { _count, activities, - assetClass, - assetSubClass, comment, - countries, currency, dataSource, id, isActive, isUsedByUsersWithSubscription, - name, - sectors, - symbol, - SymbolProfileOverrides - }) => { - let countriesCount = countries ? Object.keys(countries).length : 0; + symbol + } = assetProfile; - const lastMarketPrice = lastMarketPriceMap.get( - getAssetProfileIdentifier({ dataSource, symbol }) + const { assetClass, assetSubClass, countries, name, sectors } = + applyAssetProfileOverrides( + assetProfile, + assetProfile.SymbolProfileOverrides ); - const marketDataItemCount = - marketDataItems.find((marketDataItem) => { - return ( - marketDataItem.dataSource === dataSource && - marketDataItem.symbol === symbol - ); - })?._count ?? 0; - - let sectorsCount = sectors ? Object.keys(sectors).length : 0; - - if (SymbolProfileOverrides) { - assetClass = SymbolProfileOverrides.assetClass ?? assetClass; - assetSubClass = - SymbolProfileOverrides.assetSubClass ?? assetSubClass; - - if ( - (SymbolProfileOverrides.countries as unknown as Prisma.JsonArray) - ?.length > 0 - ) { - countriesCount = ( - SymbolProfileOverrides.countries as unknown as Prisma.JsonArray - ).length; - } + const countriesCount = countries ? Object.keys(countries).length : 0; - name = SymbolProfileOverrides.name ?? name; + const lastMarketPrice = lastMarketPriceMap.get( + getAssetProfileIdentifier({ dataSource, symbol }) + ); - if ( - (SymbolProfileOverrides.sectors as unknown as Sector[])?.length > - 0 - ) { - sectorsCount = ( - SymbolProfileOverrides.sectors as unknown as Prisma.JsonArray - ).length; - } - } + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; - return { - assetClass, - assetSubClass, - comment, - countriesCount, - currency, - dataSource, - id, - isActive, - lastMarketPrice, - marketDataItemCount, - name, - sectorsCount, - symbol, - activitiesCount: _count.activities, - date: activities?.[0]?.date, - isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription, - watchedByCount: _count.watchedBy - }; - } - ) + const sectorsCount = sectors ? Object.keys(sectors).length : 0; + + return { + assetClass, + assetSubClass, + comment, + countriesCount, + currency, + dataSource, + id, + isActive, + lastMarketPrice, + marketDataItemCount, + name, + sectorsCount, + symbol, + activitiesCount: _count.activities, + date: activities?.[0]?.date, + isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription, + watchedByCount: _count.watchedBy + }; + }) ); if (presetId) { diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index 51f609d22..b5b701fe4 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -178,14 +178,27 @@ export class DataGatheringService { ); for (const [symbol, assetProfile] of Object.entries(assetProfiles)) { - const symbolMapping = symbolProfiles.find((symbolProfile) => { - return symbolProfile.symbol === symbol; - })?.symbolMapping; + const symbolProfile = symbolProfiles.find( + ({ symbol: symbolProfileSymbol }) => { + return symbolProfileSymbol === symbol; + } + ); + + const symbolMapping = symbolProfile?.symbolMapping; + + let enhancedAssetProfile = symbolProfile + ? { + ...assetProfile, + assetClass: symbolProfile.assetClass ?? assetProfile.assetClass, + assetSubClass: + symbolProfile.assetSubClass ?? assetProfile.assetSubClass + } + : assetProfile; for (const dataEnhancer of this.dataEnhancers) { try { - assetProfiles[symbol] = await dataEnhancer.enhance({ - response: assetProfile, + enhancedAssetProfile = await dataEnhancer.enhance({ + response: enhancedAssetProfile, symbol: symbolMapping?.[dataEnhancer.getName()] ?? symbol }); } catch (error) { @@ -198,9 +211,9 @@ export class DataGatheringService { } } + const { assetClass, assetSubClass } = assetProfile; + const { - assetClass, - assetSubClass, countries, currency, cusip, @@ -213,7 +226,7 @@ export class DataGatheringService { name, sectors, url - } = assetProfile; + } = enhancedAssetProfile; try { await this.prismaService.symbolProfile.upsert({ diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts index 4c2c42589..413b7db03 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -1,5 +1,6 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { UNKNOWN_KEY } from '@ghostfolio/common/config'; +import { applyAssetProfileOverrides } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, EnhancedSymbolProfile, @@ -192,21 +193,28 @@ export class SymbolProfileService { })[] ): EnhancedSymbolProfile[] { return symbolProfiles.map((symbolProfile) => { + const symbolProfileWithOverrides = applyAssetProfileOverrides( + symbolProfile, + symbolProfile.SymbolProfileOverrides + ); + const item = { - ...symbolProfile, + ...symbolProfileWithOverrides, activitiesCount: 0, countries: this.getCountries( - symbolProfile?.countries as unknown as Prisma.JsonArray + symbolProfileWithOverrides?.countries as unknown as Prisma.JsonArray ), dateOfFirstActivity: undefined as Date, holdings: this.getHoldings( - symbolProfile?.holdings as unknown as Prisma.JsonArray + symbolProfileWithOverrides?.holdings as unknown as Prisma.JsonArray + ), + scraperConfiguration: this.getScraperConfiguration( + symbolProfileWithOverrides ), - scraperConfiguration: this.getScraperConfiguration(symbolProfile), sectors: this.getSectors( - symbolProfile?.sectors as unknown as Prisma.JsonArray + symbolProfileWithOverrides?.sectors as unknown as Prisma.JsonArray ), - symbolMapping: this.getSymbolMapping(symbolProfile), + symbolMapping: this.getSymbolMapping(symbolProfileWithOverrides), watchedByCount: 0 }; @@ -217,45 +225,7 @@ export class SymbolProfileService { item.dateOfFirstActivity = symbolProfile.activities?.[0]?.date; delete item.activities; - if (item.SymbolProfileOverrides) { - item.assetClass = - item.SymbolProfileOverrides.assetClass ?? item.assetClass; - item.assetSubClass = - item.SymbolProfileOverrides.assetSubClass ?? item.assetSubClass; - - if ( - (item.SymbolProfileOverrides.countries as unknown as Prisma.JsonArray) - ?.length > 0 - ) { - item.countries = this.getCountries( - item.SymbolProfileOverrides.countries as unknown as Prisma.JsonArray - ); - } - - if ( - (item.SymbolProfileOverrides.holdings as unknown as Holding[]) - ?.length > 0 - ) { - item.holdings = this.getHoldings( - item.SymbolProfileOverrides.holdings as unknown as Prisma.JsonArray - ); - } - - item.name = item.SymbolProfileOverrides.name ?? item.name; - - if ( - (item.SymbolProfileOverrides.sectors as unknown as Sector[])?.length > - 0 - ) { - item.sectors = this.getSectors( - item.SymbolProfileOverrides.sectors as unknown as Prisma.JsonArray - ); - } - - item.url = item.SymbolProfileOverrides.url ?? item.url; - - delete item.SymbolProfileOverrides; - } + delete item.SymbolProfileOverrides; return item; }); diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index c5f6cbbb9..02bd26b90 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -1,5 +1,12 @@ import { NumberParser } from '@internationalized/number'; -import { Type as ActivityType, DataSource, MarketData } from '@prisma/client'; +import { + Type as ActivityType, + DataSource, + MarketData, + Prisma, + SymbolProfile, + SymbolProfileOverrides +} from '@prisma/client'; import { Big } from 'big.js'; import { isISO4217CurrencyCode } from 'class-validator'; import { @@ -47,6 +54,42 @@ export const DATE_FORMAT = 'yyyy-MM-dd'; export const DATE_FORMAT_MONTHLY = 'MMMM yyyy'; export const DATE_FORMAT_YEARLY = 'yyyy'; +export function applyAssetProfileOverrides>( + assetProfile: T, + assetProfileOverrides: SymbolProfileOverrides | null +): T { + if (!assetProfileOverrides) { + return assetProfile; + } + + const assetProfileWithOverrides = { ...assetProfile } as T; + + assetProfileWithOverrides.assetClass = + assetProfileOverrides.assetClass ?? assetProfile.assetClass; + + assetProfileWithOverrides.assetSubClass = + assetProfileOverrides.assetSubClass ?? assetProfile.assetSubClass; + + if ((assetProfileOverrides.countries as Prisma.JsonArray)?.length > 0) { + assetProfileWithOverrides.countries = assetProfileOverrides.countries; + } + + if ((assetProfileOverrides.holdings as Prisma.JsonArray)?.length > 0) { + assetProfileWithOverrides.holdings = assetProfileOverrides.holdings; + } + + assetProfileWithOverrides.name = + assetProfileOverrides.name ?? assetProfile.name; + + if ((assetProfileOverrides.sectors as Prisma.JsonArray)?.length > 0) { + assetProfileWithOverrides.sectors = assetProfileOverrides.sectors; + } + + assetProfileWithOverrides.url = assetProfileOverrides.url ?? assetProfile.url; + + return assetProfileWithOverrides; +} + export function calculateBenchmarkTrend({ days, historicalData From 37a70f23ce3e2df26beebc5266467c4fd17fc9e8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 12:39:58 +0200 Subject: [PATCH 07/42] Task/improve styling in user detail dialog of admin control (#6992) * Improve styling * Update changelog --- CHANGELOG.md | 3 ++- .../asset-profile-dialog/asset-profile-dialog.html | 4 ++-- .../user-detail-dialog/user-detail-dialog.component.scss | 4 ++++ .../app/components/user-detail-dialog/user-detail-dialog.html | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f713f736..b9b9f118d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,13 +14,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Centralized the asset profile override logic for manual adjustments +- Improved the styling in the user detail dialog of the admin control panel’s users section - Refactored the backend logging to use the instance-based `Logger` - Improved the language localization for Ukrainian (`uk`) ### Fixed - Fixed an issue where the asset profile override (asset class and asset sub class) was not applied to the data enhancers when gathering asset profiles -- Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles +- Fixed a layout issue in the asset profile dialog of the admin control panel by truncating long titles ## 3.7.0 - 2026-06-02 diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 61ca6a6da..ddcf96b3b 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1,5 +1,5 @@
-

+
{{ assetProfile?.name ?? data.symbol }} @@ -87,7 +87,7 @@ Delete -

+
+
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 8c42e37ea..e745decd0 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -157,6 +157,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { public SymbolProfile: EnhancedSymbolProfile; public tags: Tag[]; public tagsAvailable: Tag[]; + public translate = translate; public user: User; public value: number; @@ -442,7 +443,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if (SymbolProfile?.sectors?.length > 0) { for (const sector of SymbolProfile.sectors) { this.sectors[sector.name] = { - name: sector.name, + name: translate(sector.name), value: sector.weight }; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index 4b04a0986..478a8e5a3 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -262,7 +262,7 @@ i18n size="medium" [locale]="data.locale" - [value]="SymbolProfile.sectors[0].name" + [value]="translate(SymbolProfile.sectors[0].name)" >Sector
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index f48b551bb..792f32bf5 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -442,7 +442,7 @@ export class GfAllocationsPageComponent implements OnInit { : position.valueInPercentage); } else { this.sectors[name] = { - name, + name: translate(name), value: weight * (isNumber(position.valueInBaseCurrency) diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts index f52639db6..52a7864ac 100644 --- a/apps/client/src/app/pages/public/public-page.component.ts +++ b/apps/client/src/app/pages/public/public-page.component.ts @@ -9,6 +9,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Market } from '@ghostfolio/common/types'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table/activities-table.component'; import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table/holdings-table.component'; +import { translate } from '@ghostfolio/ui/i18n'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart/portfolio-proportion-chart.component'; import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -232,7 +233,7 @@ export class GfPublicPageComponent implements OnInit { weight * (position.valueInBaseCurrency ?? 0); } else { this.sectors[name] = { - name, + name: translate(name), value: weight * (this.publicPortfolioDetails.holdings[symbol] diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 28d902d71..5f2dd9a1c 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -282,6 +282,21 @@ export const REPLACE_NAME_PARTS = [ 'Xtrackers (IE) Plc -' ]; +export const SECTORS = [ + 'Basic Materials', + 'Communication Services', + 'Consumer Cyclical', + 'Consumer Defensive', + 'Energy', + 'Financial Services', + 'Healthcare', + 'Industrials', + 'Other', + 'Real Estate', + 'Technology', + 'Utilities' +] as const; + export const STORYBOOK_PATH = '/development/storybook'; export const SUPPORTED_LANGUAGE_CODES = [ diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts index 781e50c55..b6e513a51 100644 --- a/libs/common/src/lib/types/index.ts +++ b/libs/common/src/lib/types/index.ts @@ -17,6 +17,7 @@ import type { MarketState } from './market-state.type'; import type { Market } from './market.type'; import type { OrderWithAccount } from './order-with-account.type'; import type { RequestWithUser } from './request-with-user.type'; +import type { SectorName } from './sector-name.type'; import type { SubscriptionOfferKey } from './subscription-offer-key.type'; import type { UserWithSettings } from './user-with-settings.type'; import type { ViewMode } from './view-mode.type'; @@ -41,6 +42,7 @@ export type { MarketState, OrderWithAccount, RequestWithUser, + SectorName, SubscriptionOfferKey, UserWithSettings, ViewMode diff --git a/libs/common/src/lib/types/sector-name.type.ts b/libs/common/src/lib/types/sector-name.type.ts new file mode 100644 index 000000000..0d9ea9cee --- /dev/null +++ b/libs/common/src/lib/types/sector-name.type.ts @@ -0,0 +1,3 @@ +import type { SECTORS } from '../config'; + +export type SectorName = (typeof SECTORS)[number]; diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index c7d8b7c8b..f6f1e8ff9 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -1,3 +1,5 @@ +import type { SectorName } from '@ghostfolio/common/types'; + import '@angular/localize/init'; const locales = { @@ -107,8 +109,22 @@ const locales = { EXTREME_GREED: $localize`Extreme Greed`, FEAR: $localize`Fear`, GREED: $localize`Greed`, - NEUTRAL: $localize`Neutral` -}; + NEUTRAL: $localize`Neutral`, + + // Sectors + 'Basic Materials': $localize`Basic Materials`, + 'Communication Services': $localize`Communication Services`, + 'Consumer Cyclical': $localize`Consumer Cyclical`, + 'Consumer Defensive': $localize`Consumer Defensive`, + Energy: $localize`Energy`, + 'Financial Services': $localize`Financial Services`, + Healthcare: $localize`Healthcare`, + Industrials: $localize`Industrials`, + Other: $localize`Other`, + 'Real Estate': $localize`Real Estate`, + Technology: $localize`Technology`, + Utilities: $localize`Utilities` +} satisfies Record & Record; export function translate(aKey: string): string { return locales[aKey] ?? aKey; From 363684526f9cfddd3e5e097fcde5591134ff309b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:17:52 +0200 Subject: [PATCH 11/42] Task/localize country names (#6995) * Localize country names * Update changelog --- CHANGELOG.md | 1 + .../asset-profile-dialog.component.ts | 6 ++-- .../asset-profile-dialog.html | 7 ++++- .../holding-detail-dialog.component.ts | 12 ++++++-- .../holding-detail-dialog.html | 7 ++++- .../allocations/allocations-page.component.ts | 11 ++++--- .../app/pages/public/public-page.component.ts | 8 ++--- libs/common/src/lib/helper.ts | 14 +++++++++ libs/ui/src/lib/i18n.ts | 29 ------------------- .../portfolio-proportion-chart.component.ts | 6 ++-- .../world-map-chart.component.ts | 16 ++++++++-- 11 files changed, 68 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e13d948b..5f17f1288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Harmonized the sector names across the data providers +- Localized the country names - Localized the sector names - Centralized the asset profile override logic for manual adjustments - Improved the styling in the user detail dialog of the admin control panel’s users section diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index fc08c3680..ce997cf27 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -8,6 +8,7 @@ import { UpdateAssetProfileDto } from '@ghostfolio/common/dtos'; import { canDeleteAssetProfile, DATE_FORMAT, + getCountryName, getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; @@ -224,6 +225,7 @@ export class GfAssetProfileDialogComponent implements OnInit { value: 'max' } ]; + protected readonly getCountryName = getCountryName; protected historicalDataItems: LineChartItem[]; protected isBenchmark = false; protected isDataGatheringEnabled: boolean; @@ -369,9 +371,9 @@ export class GfAssetProfileDialogComponent implements OnInit { this.assetProfile?.countries && this.assetProfile.countries.length > 0 ) { - for (const { code, name, weight } of this.assetProfile.countries) { + for (const { code, weight } of this.assetProfile.countries) { this.countries[code] = { - name, + name: getCountryName({ code, locale: this.data.locale }), value: weight }; } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 474fff3ca..d9a5354e5 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -269,7 +269,12 @@ i18n size="medium" [locale]="data.locale" - [value]="assetProfile?.countries[0].name" + [value]=" + getCountryName({ + code: assetProfile?.countries[0].code, + locale: data.locale + }) + " >Country
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index e745decd0..68bb1215a 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -6,7 +6,11 @@ import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { CreateOrderDto } from '@ghostfolio/common/dtos'; -import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; +import { + DATE_FORMAT, + downloadAsFile, + getCountryName +} from '@ghostfolio/common/helper'; import { Activity, DataProviderInfo, @@ -121,6 +125,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { public dividendInBaseCurrencyPrecision = 2; public dividendYieldPercentWithCurrencyEffect: number; public feeInBaseCurrency: number; + public getCountryName = getCountryName; public hasPermissionToCreateOwnTag: boolean; public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; public historicalDataItems: LineChartItem[]; @@ -434,7 +439,10 @@ export class GfHoldingDetailDialogComponent implements OnInit { if (SymbolProfile?.countries?.length > 0) { for (const country of SymbolProfile.countries) { this.countries[country.code] = { - name: country.name, + name: getCountryName({ + code: country.code, + locale: this.data.locale + }), value: country.weight }; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index 478a8e5a3..609eec3c0 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -272,7 +272,12 @@ i18n size="medium" [locale]="data.locale" - [value]="SymbolProfile.countries[0].name" + [value]=" + getCountryName({ + code: SymbolProfile.countries[0].code, + locale: data.locale + }) + " >Country
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index 792f32bf5..d0eb3788b 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -3,7 +3,7 @@ import { AccountDetailDialogParams } from '@ghostfolio/client/components/account import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config'; -import { prettifySymbol } from '@ghostfolio/common/helper'; +import { getCountryName, prettifySymbol } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, HoldingWithParents, @@ -353,7 +353,7 @@ export class GfAllocationsPageComponent implements OnInit { if (position.assetProfile.countries.length > 0) { for (const country of position.assetProfile.countries) { - const { code, continent, name, weight } = country; + const { code, continent, weight } = country; if (this.continents[continent]?.value) { this.continents[continent].value += @@ -363,7 +363,7 @@ export class GfAllocationsPageComponent implements OnInit { : position.valueInPercentage); } else { this.continents[continent] = { - name: continent, + name: translate(continent), value: weight * (isNumber(position.valueInBaseCurrency) @@ -380,7 +380,10 @@ export class GfAllocationsPageComponent implements OnInit { : position.valueInPercentage); } else { this.countries[code] = { - name, + name: getCountryName({ + code, + locale: this.user?.settings?.locale + }), value: weight * (isNumber(position.valueInBaseCurrency) diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts index 52a7864ac..43d961c1d 100644 --- a/apps/client/src/app/pages/public/public-page.component.ts +++ b/apps/client/src/app/pages/public/public-page.component.ts @@ -1,5 +1,5 @@ import { UNKNOWN_KEY } from '@ghostfolio/common/config'; -import { prettifySymbol } from '@ghostfolio/common/helper'; +import { getCountryName, prettifySymbol } from '@ghostfolio/common/helper'; import { InfoItem, PortfolioPosition, @@ -186,14 +186,14 @@ export class GfPublicPageComponent implements OnInit { if (position.assetProfile.countries.length > 0) { for (const country of position.assetProfile.countries) { - const { code, continent, name, weight } = country; + const { code, continent, weight } = country; if (this.continents[continent]?.value) { this.continents[continent].value += weight * (position.valueInBaseCurrency ?? 0); } else { this.continents[continent] = { - name: continent, + name: translate(continent), value: weight * (this.publicPortfolioDetails.holdings[symbol] @@ -206,7 +206,7 @@ export class GfPublicPageComponent implements OnInit { weight * (position.valueInBaseCurrency ?? 0); } else { this.countries[code] = { - name, + name: getCountryName({ code }), value: weight * (this.publicPortfolioDetails.holdings[symbol] diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 02bd26b90..db320c7cb 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -258,6 +258,20 @@ export function getCurrencyFromSymbol(aSymbol = '') { return aSymbol.replace(DEFAULT_CURRENCY, ''); } +export function getCountryName({ + code, + locale = getLocale() +}: { + code: string; + locale?: string; +}) { + try { + return new Intl.DisplayNames([locale], { type: 'region' }).of(code) ?? code; + } catch { + return code; + } +} + export function getDateFnsLocale(aLanguageCode?: string) { if (aLanguageCode === 'ca') { return ca; diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index f6f1e8ff9..2c037c7d1 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -75,35 +75,6 @@ const locales = { Oceania: $localize`Oceania`, 'South America': $localize`South America`, - // Countries - Armenia: $localize`Armenia`, - Argentina: $localize`Argentina`, - Australia: $localize`Australia`, - Austria: $localize`Austria`, - Belgium: $localize`Belgium`, - 'British Virgin Islands': $localize`British Virgin Islands`, - Bulgaria: $localize`Bulgaria`, - Canada: $localize`Canada`, - 'Czech Republic': $localize`Czech Republic`, - Finland: $localize`Finland`, - France: $localize`France`, - Germany: $localize`Germany`, - India: $localize`India`, - Indonesia: $localize`Indonesia`, - Italy: $localize`Italy`, - Japan: $localize`Japan`, - Netherlands: $localize`Netherlands`, - 'New Zealand': $localize`New Zealand`, - Poland: $localize`Poland`, - Romania: $localize`Romania`, - Singapore: $localize`Singapore`, - 'South Africa': $localize`South Africa`, - Switzerland: $localize`Switzerland`, - Thailand: $localize`Thailand`, - Ukraine: $localize`Ukraine`, - 'United Kingdom': $localize`United Kingdom`, - 'United States': $localize`United States`, - // Fear and Greed Index EXTREME_FEAR: $localize`Extreme Fear`, EXTREME_GREED: $localize`Extreme Greed`, 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 4021bf97f..7c17b587c 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 @@ -37,8 +37,6 @@ import Color from 'color'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; -import { translate } from '../i18n'; - const { blue, cyan, @@ -390,7 +388,7 @@ export class GfPortfolioProportionChartComponent return value > 0 ? isUUID(symbol) - ? (translate(this.data[symbol]?.name) ?? symbol) + ? (this.data[symbol]?.name ?? symbol) : symbol : ''; }, @@ -453,7 +451,7 @@ export class GfPortfolioProportionChartComponent symbol = $localize`No data available`; } - const name = translate(this.data[symbol]?.name); + const name = this.data[symbol]?.name; let sum = 0; diff --git a/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts b/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts index f86d4d010..0d5eb7387 100644 --- a/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts +++ b/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts @@ -1,4 +1,8 @@ -import { getLocale, getNumberFormatGroup } from '@ghostfolio/common/helper'; +import { + getCountryName, + getLocale, + getNumberFormatGroup +} from '@ghostfolio/common/helper'; import { ChangeDetectionStrategy, @@ -25,7 +29,7 @@ export class GfWorldMapChartComponent implements OnChanges, OnDestroy { @Input() locale = getLocale(); public isLoading = true; - public svgMapElement; + public svgMapElement: any; public constructor(private changeDetectorRef: ChangeDetectorRef) {} @@ -88,6 +92,14 @@ export class GfWorldMapChartComponent implements OnChanges, OnDestroy { targetElementID: 'svgMap' }); + this.svgMapElement.options.countryNames = Object.keys( + this.svgMapElement.countries + ).reduce<{ [code: string]: string }>((names, code) => { + names[code] = getCountryName({ code, locale: this.locale }); + + return names; + }, {}); + setTimeout(() => { this.isLoading = false; From b3f20e175c822dd410c3ec035aaf7b5e54f93862 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:20:35 +0200 Subject: [PATCH 12/42] Task/update locales (#6902) Update locales --- apps/client/src/locales/messages.ca.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.de.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.es.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.fr.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.it.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.ko.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.nl.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.pl.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.pt.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.tr.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.uk.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.xlf | 734 ++++++++++------------ apps/client/src/locales/messages.zh.xlf | 770 ++++++++++-------------- 13 files changed, 4189 insertions(+), 5785 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 10fa62f11..9a181613d 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -10,7 +10,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -34,11 +34,11 @@ Iniciar sessió apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -403,7 +403,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -427,7 +427,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -467,11 +467,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -499,7 +499,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -563,7 +563,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -643,7 +643,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -695,7 +695,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -719,7 +719,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -871,7 +871,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -879,7 +879,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -891,7 +891,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -899,7 +899,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -907,7 +907,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -927,7 +927,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -991,7 +991,7 @@ Realment vol eliminar el perfil d’aquest actiu? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -999,7 +999,7 @@ Realment vol eliminar aquests perfils? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -1007,7 +1007,7 @@ Oooh! No s’han pogut eliminar els perfils apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -1018,12 +1018,20 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + The current market price is El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -1067,7 +1075,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -1075,7 +1083,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1087,15 +1095,15 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -1107,15 +1115,15 @@ Països apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1123,7 +1131,15 @@ Mapatge de Símbols apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -1139,7 +1155,7 @@ Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1147,7 +1163,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -1155,11 +1171,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1175,7 +1191,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1183,7 +1199,7 @@ Notes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1210,6 +1226,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Afegir manualment @@ -1238,6 +1262,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? Està segur qeu vol eliminar aquest cupó? @@ -1315,7 +1347,7 @@ Recollida de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1395,7 +1427,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1427,7 +1459,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1475,7 +1507,7 @@ Està segur que vol eliminar aquesta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1499,7 +1531,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1515,7 +1547,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1567,11 +1599,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1595,15 +1627,15 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1619,11 +1651,11 @@ Punt de Referència apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1639,7 +1671,7 @@ Millora la teva Subscripció apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1667,7 +1699,7 @@ Renova la teva Subscripció apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -1683,7 +1715,7 @@ Sobre Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1695,11 +1727,11 @@ Oooh! El testimoni de seguretat és incorrecte. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1739,7 +1771,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1762,14 +1794,6 @@ 92 - - Indonesia - Indonèsia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Activitat @@ -1783,7 +1807,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1831,7 +1855,7 @@ Por apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1839,7 +1863,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1847,7 +1871,7 @@ Cobdícia apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1855,7 +1879,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1955,7 +1979,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2074,6 +2098,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Manteniu la sessió iniciada @@ -2095,7 +2127,7 @@ Les dades del mercat s’han retardat apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -2371,7 +2403,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2383,7 +2415,7 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2395,7 +2427,7 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2415,7 +2447,7 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2427,15 +2459,7 @@ Vaja! No s’ha pogut concedir l’accés. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -2502,6 +2526,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed El codi del cupó s’ha bescanviat @@ -2595,7 +2627,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -2606,6 +2638,14 @@ 328 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista del presentador @@ -2651,7 +2691,7 @@ Localització apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2779,7 +2819,7 @@ Aquesta funció no està disponible actualment. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2787,15 +2827,15 @@ Si us plau, torna-ho a provar més tard. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2803,7 +2843,7 @@ Aquesta acció no està permesa. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -2811,11 +2851,11 @@ Vaja! Alguna cosa va fallar. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2827,11 +2867,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2839,7 +2879,7 @@ Ups! Sembla que esteu fent massa sol·licituds. Si us plau, aneu una mica més lent. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -2851,11 +2891,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2959,15 +2999,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2991,7 +3031,7 @@ Vaja, la transferència del saldo en efectiu ha fallat. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -3047,11 +3087,11 @@ Control d’administració apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -3071,7 +3111,7 @@ Dades de mercat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3123,7 +3163,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3263,11 +3303,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -3468,7 +3508,7 @@ Comença apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3540,7 +3580,7 @@ Mercats apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3548,7 +3588,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3719,6 +3759,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Utilitza Ghostfolio de manera anònima i sigues propietari de les teves dades financeres. @@ -4072,7 +4120,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4176,7 +4224,7 @@ Activitats d’importació apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4192,7 +4240,7 @@ Importar dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4208,7 +4256,7 @@ S’estan important dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -4216,7 +4264,7 @@ La importació s’ha completat apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -4232,7 +4280,7 @@ S’estan validant les dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4416,7 +4464,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4548,11 +4596,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4568,11 +4616,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4592,7 +4640,7 @@ Mensualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4600,7 +4648,7 @@ Anualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4608,7 +4656,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -4656,7 +4704,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4664,7 +4712,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4672,7 +4720,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4680,7 +4728,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4688,7 +4736,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4696,7 +4744,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4724,15 +4772,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4904,11 +4952,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -5055,10 +5103,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5069,7 +5113,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5313,11 +5357,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -5365,7 +5409,7 @@ El meu Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5489,7 +5533,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5509,7 +5553,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5529,7 +5573,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5549,7 +5593,7 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -5597,7 +5641,7 @@ Tendència de 50 dies libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5605,7 +5649,7 @@ Tendència de 200 dies libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5621,7 +5665,7 @@ Darrer tot el temps libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5629,7 +5673,7 @@ Canvi des del màxim històric libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5645,7 +5689,7 @@ de l’ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5653,7 +5697,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5729,7 +5773,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5749,7 +5793,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5765,7 +5809,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5781,7 +5825,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5793,7 +5837,7 @@ Àsia-Pacífic libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5809,7 +5853,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5821,11 +5865,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5841,7 +5885,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5853,7 +5897,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5861,7 +5905,7 @@ Comprar i vendre libs/ui/src/lib/i18n.ts - 8 + 10 @@ -5869,7 +5913,7 @@ Bàsic libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5877,7 +5921,7 @@ Canvia fàcilment a Ghostfolio Premium o Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5885,7 +5929,7 @@ Canvia fàcilment a Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5901,7 +5945,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5909,7 +5953,7 @@ Subvenció libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5917,7 +5961,7 @@ Risc Alt libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5925,15 +5969,7 @@ Aquesta activitat ja existeix. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - Japó - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5941,7 +5977,7 @@ Risc Baix libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5949,7 +5985,7 @@ Mes libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5957,7 +5993,7 @@ Mesos libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5965,11 +6001,15 @@ Altres libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5977,7 +6017,7 @@ Predefinit libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5985,7 +6025,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5993,7 +6033,7 @@ Provisió de jubilació libs/ui/src/lib/i18n.ts - 27 + 29 @@ -6009,7 +6049,7 @@ Satèl·lit libs/ui/src/lib/i18n.ts - 28 + 30 @@ -6033,11 +6073,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -6045,11 +6085,11 @@ Etiqueta libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -6057,7 +6097,7 @@ Any libs/ui/src/lib/i18n.ts - 31 + 33 @@ -6077,7 +6117,7 @@ Anys libs/ui/src/lib/i18n.ts - 32 + 34 @@ -6097,7 +6137,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -6113,7 +6153,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -6121,7 +6161,7 @@ Valuós libs/ui/src/lib/i18n.ts - 42 + 44 @@ -6129,7 +6169,7 @@ Passiu libs/ui/src/lib/i18n.ts - 40 + 42 @@ -6141,7 +6181,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -6153,7 +6193,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -6161,7 +6201,7 @@ Mercaderia libs/ui/src/lib/i18n.ts - 46 + 48 @@ -6173,7 +6213,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -6181,7 +6221,7 @@ Ingressos Fixos libs/ui/src/lib/i18n.ts - 48 + 50 @@ -6189,7 +6229,7 @@ Liquiditat libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6197,7 +6237,11 @@ Immobiliari libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -6213,7 +6257,7 @@ Bona libs/ui/src/lib/i18n.ts - 53 + 55 @@ -6221,7 +6265,7 @@ Criptomoneda libs/ui/src/lib/i18n.ts - 56 + 58 @@ -6229,7 +6273,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -6237,7 +6281,7 @@ Fons d’inversió libs/ui/src/lib/i18n.ts - 59 + 61 @@ -6245,7 +6289,7 @@ Metall preciós libs/ui/src/lib/i18n.ts - 60 + 62 @@ -6253,7 +6297,7 @@ Capital privat libs/ui/src/lib/i18n.ts - 61 + 63 @@ -6261,7 +6305,7 @@ Acció libs/ui/src/lib/i18n.ts - 62 + 64 @@ -6269,7 +6313,7 @@ Àfrica libs/ui/src/lib/i18n.ts - 69 + 71 @@ -6277,7 +6321,15 @@ Àsia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -6285,7 +6337,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -6293,7 +6345,7 @@ Amèrica del Nord libs/ui/src/lib/i18n.ts - 72 + 74 @@ -6309,7 +6361,7 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 @@ -6317,7 +6369,7 @@ Amèrica del Sud libs/ui/src/lib/i18n.ts - 74 + 76 @@ -6325,7 +6377,7 @@ Por extrema libs/ui/src/lib/i18n.ts - 106 + 79 @@ -6333,7 +6385,7 @@ Avarícia extrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -6341,7 +6393,7 @@ Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -6377,15 +6429,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6572,38 +6624,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgium - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Czech Republic - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - France - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Germany - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italy - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Netherlands - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - New Zealand - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Poland - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romania - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - South Africa - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - United States - - libs/ui/src/lib/i18n.ts - 103 - - Error Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Yes libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7157,15 +7073,7 @@ Get access to 80’000+ tickers from over 50 exchanges libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Terms and Conditions @@ -7691,11 +7575,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Terms of Service @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Collectible libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index bfff88889..504dc107a 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -110,7 +110,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -150,11 +150,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -214,7 +214,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -294,7 +294,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -334,7 +334,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -402,7 +402,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -498,7 +498,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -646,7 +646,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -662,7 +662,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -706,7 +706,7 @@ Über Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -718,7 +718,7 @@ Registrieren apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -750,11 +750,11 @@ Einloggen apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -774,11 +774,11 @@ Ups! Falsches Sicherheits-Token. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -885,6 +885,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Eingeloggt bleiben @@ -978,15 +986,15 @@ Sektoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -998,15 +1006,15 @@ Länder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1030,7 +1038,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1042,7 +1050,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1058,7 +1066,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1078,7 +1086,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1090,7 +1098,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1102,7 +1110,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1122,7 +1130,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1138,11 +1146,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1154,11 +1162,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1190,7 +1198,7 @@ Mein Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1213,6 +1221,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Gutscheincode wurde eingelöst @@ -1273,6 +1289,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Präsentationsansicht @@ -1294,7 +1318,7 @@ Lokalität apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1382,15 +1406,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1434,7 +1458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1502,11 +1526,11 @@ Administration apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1670,7 +1694,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1698,7 +1722,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1726,7 +1750,7 @@ Märkte apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1734,7 +1758,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1870,7 +1894,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1886,7 +1910,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1946,7 +1970,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1970,7 +1994,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1993,6 +2017,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Anzahl @@ -2010,7 +2042,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2030,7 +2062,7 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2074,7 +2106,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2098,7 +2130,7 @@ Daten importieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2106,7 +2138,7 @@ Der Import wurde abgeschlossen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2126,15 +2158,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2154,15 +2186,15 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2238,11 +2270,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2290,7 +2322,7 @@ Aktivitäten importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2354,7 +2386,7 @@ Änderung vom Allzeithoch libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2370,7 +2402,7 @@ vom AZH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2402,7 +2434,7 @@ Diese Funktion ist derzeit nicht verfügbar. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2410,15 +2442,15 @@ Bitte versuche es später noch einmal. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2426,11 +2458,11 @@ Ups! Es ist etwas schief gelaufen. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2466,7 +2498,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2474,7 +2506,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2490,7 +2522,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2550,7 +2582,7 @@ Monatlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2586,7 +2618,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2618,7 +2650,7 @@ Angst apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2626,7 +2658,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2634,7 +2666,7 @@ Gier apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2642,7 +2674,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2650,7 +2682,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2686,11 +2718,11 @@ Das Formular konnte nicht validiert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2706,11 +2738,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2778,7 +2810,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2810,7 +2842,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2830,7 +2862,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2842,11 +2874,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2870,11 +2902,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2882,11 +2914,11 @@ Tag libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2898,7 +2930,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2906,7 +2938,7 @@ Rohstoff libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2918,7 +2950,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2926,7 +2958,7 @@ Feste Einkünfte libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2934,7 +2966,11 @@ Immobilien libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2950,7 +2986,7 @@ Anleihe libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2958,7 +2994,7 @@ Kryptowährung libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2966,7 +3002,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2974,7 +3010,7 @@ Investmentfonds libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2982,7 +3018,7 @@ Edelmetall libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2990,7 +3026,7 @@ Privates Beteiligungskapital libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2998,7 +3034,7 @@ Aktie libs/ui/src/lib/i18n.ts - 62 + 64 @@ -3014,7 +3050,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3022,11 +3058,15 @@ Andere libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3042,15 +3082,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3062,7 +3102,7 @@ Nordamerika libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3070,7 +3110,7 @@ Afrika libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3078,7 +3118,15 @@ Asien libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3086,7 +3134,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3102,7 +3150,7 @@ Ozeanien libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3110,7 +3158,7 @@ Südamerika libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3154,7 +3202,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3162,7 +3210,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3198,11 +3246,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3218,7 +3266,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3230,7 +3278,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3246,7 +3294,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3270,7 +3318,7 @@ Marktdaten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3326,7 +3374,7 @@ Jährlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3334,7 +3382,7 @@ Dividenden importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3362,7 +3410,7 @@ Kern libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3370,7 +3418,7 @@ Zuwendung libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3378,7 +3426,7 @@ Höheres Risiko libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3386,7 +3434,7 @@ Geringeres Risiko libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3394,7 +3442,7 @@ Keine Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3402,7 +3450,7 @@ Altersvorsorge libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3418,7 +3466,7 @@ Satellit libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3542,7 +3590,7 @@ Mitgliedschaft abschliessen apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3670,11 +3718,11 @@ Das Anlageprofil konnte nicht gespeichert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3742,7 +3790,7 @@ Einfacher Wechsel zu Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3766,7 +3814,7 @@ Einfacher Wechsel zu Ghostfolio Premium oder Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3774,7 +3822,7 @@ Darlehen libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3826,7 +3874,7 @@ Mitgliedschaft erneuern apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3906,7 +3954,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3922,11 +3970,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3942,7 +3990,7 @@ Das Anlageprofil wurde gespeichert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3950,7 +3998,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -4022,7 +4070,7 @@ Diese Aktivität existiert bereits. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4086,7 +4134,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4094,7 +4142,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4102,7 +4150,7 @@ Monate libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4110,7 +4158,7 @@ Jahre libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4118,7 +4166,7 @@ Monat libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4126,7 +4174,7 @@ Jahr libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4286,7 +4334,15 @@ Verbindlichkeit libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4302,7 +4358,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4530,7 +4586,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4538,7 +4594,7 @@ Wertsache libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4546,7 +4602,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4554,7 +4610,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4570,7 +4626,7 @@ Filtervorlage libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4586,15 +4642,7 @@ Asien-Pazifik libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japan - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4790,7 +4838,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4842,11 +4890,11 @@ Die Scraper Konfiguration konnte nicht geparsed werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4937,6 +4985,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Nutze Ghostfolio ganz anonym und behalte deine Finanzdaten. @@ -5402,10 +5458,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5416,7 +5468,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5516,7 +5568,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5540,7 +5592,7 @@ Möchtest du diesen Tag wirklich löschen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5648,7 +5700,7 @@ Möchtest du dieses Anlageprofil wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5659,6 +5711,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Manuell hinzufügen @@ -5688,7 +5748,7 @@ Letztes Allzeithoch libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5732,7 +5792,7 @@ Ups, der Cash-Bestand Transfer ist fehlgeschlagen. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5740,7 +5800,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5748,7 +5808,7 @@ Extreme Gier libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5756,7 +5816,7 @@ Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5767,6 +5827,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Möchtest du diese Systemmeldung wirklich löschen? @@ -5780,7 +5848,7 @@ 50 Tage Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5788,7 +5856,7 @@ 200 Tage Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5796,7 +5864,7 @@ Cash-Bestände apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5832,7 +5900,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5840,7 +5908,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5880,15 +5948,7 @@ Ups! Der Zugang konnte nicht gewährt werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentinien - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5912,7 +5972,7 @@ Die Marktdaten sind verzögert für apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5928,11 +5988,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5952,7 +6012,7 @@ Position abschliessen apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -6000,7 +6060,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6020,7 +6080,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6068,7 +6128,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6088,7 +6148,7 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6108,7 +6168,7 @@ Finanzmarktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6173,7 +6233,7 @@ Ups! Es sieht so aus, als würdest du zu viele Anfragen senden. Bitte geh es ein bisschen langsamer an. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6200,14 +6260,6 @@ 62 - - Indonesia - Indonesien - - libs/ui/src/lib/i18n.ts - 90 - - Activity Aktivität @@ -6245,7 +6297,7 @@ Diese Aktion ist nicht zulässig. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6253,7 +6305,7 @@ Liquidität libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6269,7 +6321,7 @@ Kauf und Verkauf libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6349,7 +6401,7 @@ Berücksichtigen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6373,7 +6425,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6389,7 +6441,7 @@ Möchtest du diese Profile wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6397,7 +6449,7 @@ Ups! Die Profile konnten nicht gelöscht werden. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6596,38 +6648,6 @@ 100 - - Australia - Australien - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Österreich - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgien - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgarien - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Position ansehen @@ -6636,124 +6656,12 @@ 474 - - Canada - Kanada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Tschechien - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finnland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Frankreich - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Deutschland - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Indien - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italien - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Niederlande - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Neuseeland - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polen - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Rumänien - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Südafrika - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - USA - - libs/ui/src/lib/i18n.ts - 103 - - Error Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6777,7 +6685,7 @@ Ups! Der Zugang konnte nicht bearbeitet werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6805,7 +6713,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6849,7 +6757,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6857,7 +6765,7 @@ Schliessen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6897,7 +6805,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6913,7 +6821,7 @@ Ja libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7064,6 +6972,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year um unseren Empfehlungslink zu verwenden und eine Ghostfolio Premium-Mitgliedschaft für ein Jahr zu erhalten @@ -7181,15 +7097,7 @@ Erhalte Zugang zu 80’000+ Tickern von über 50 Handelsplätzen libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7395,7 +7303,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7443,11 +7351,11 @@ Ich apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7487,7 +7395,7 @@ KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7503,7 +7411,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7511,7 +7419,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7519,7 +7427,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7527,7 +7435,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7535,7 +7443,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7543,7 +7451,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7551,7 +7459,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7559,7 +7467,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7567,7 +7475,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7583,7 +7491,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7599,11 +7507,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7646,30 +7554,6 @@ 94 - - Armenia - Armenien - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Britische Jungferninseln - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Nutzungsbedingungen @@ -7715,11 +7599,11 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7727,7 +7611,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7738,14 +7622,6 @@ 239 - - United Kingdom - Vereinigtes Königreich - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Allgemeine Geschäftsbedingungen @@ -7792,7 +7668,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7800,7 +7676,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ jemand apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Ausloggen apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Möchtest du wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investition libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Sammlerobjekt libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index c99924de8..e475b9c2c 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -111,7 +111,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -151,11 +151,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -215,7 +215,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -295,7 +295,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -335,7 +335,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -403,7 +403,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -499,7 +499,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -631,7 +631,7 @@ ¿Seguro que quieres eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -647,7 +647,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -691,7 +691,7 @@ Sobre Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -703,7 +703,7 @@ Empezar apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -735,11 +735,11 @@ Iniciar sesión apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -759,11 +759,11 @@ ¡Vaya! Token de seguridad incorrecto. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -870,6 +870,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Seguir conectado @@ -963,15 +971,15 @@ Sectores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -983,15 +991,15 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1015,7 +1023,7 @@ Reportar anomalía en los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1027,7 +1035,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1043,7 +1051,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1063,7 +1071,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1075,7 +1083,7 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1087,7 +1095,7 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1107,7 +1115,7 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1123,11 +1131,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1139,11 +1147,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1175,7 +1183,7 @@ Mi Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1198,6 +1206,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed El código del cupón ha sido canjeado @@ -1258,6 +1274,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista del presentador @@ -1279,7 +1303,7 @@ Configuración regional apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1367,15 +1391,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1419,7 +1443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1487,11 +1511,11 @@ Control de administrador apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1655,7 +1679,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1683,7 +1707,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1711,7 +1735,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1719,7 +1743,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1855,7 +1879,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1871,7 +1895,7 @@ Peores apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1931,7 +1955,7 @@ Semana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1955,7 +1979,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1978,6 +2002,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Cantidad @@ -1995,7 +2027,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2015,7 +2047,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2059,7 +2091,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2083,7 +2115,7 @@ Importando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2091,7 +2123,7 @@ La importación se ha completado apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2111,15 +2143,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2139,15 +2171,15 @@ Cartera apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2223,11 +2255,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2275,7 +2307,7 @@ Importar operaciones apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2339,7 +2371,7 @@ Variación respecto al máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2355,7 +2387,7 @@ desde el máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2387,7 +2419,7 @@ Esta funcionalidad no está disponible actualmente. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2395,11 +2427,11 @@ ¡Vaya! Algo no funcionó bien. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2407,15 +2439,15 @@ Por favor, prueba más tarde. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2427,7 +2459,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2499,7 +2531,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2507,7 +2539,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2555,7 +2587,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2579,7 +2611,7 @@ Mensual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2603,7 +2635,7 @@ Miedo apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2611,7 +2643,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2619,7 +2651,7 @@ Codicia apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2627,7 +2659,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2635,7 +2667,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2671,11 +2703,11 @@ Índice de referencia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2683,11 +2715,11 @@ No se pudo validar el formulario apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2763,7 +2795,7 @@ Evolución de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2795,7 +2827,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2815,7 +2847,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2827,11 +2859,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2855,11 +2887,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2867,11 +2899,11 @@ Etiqueta libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2883,7 +2915,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2891,7 +2923,7 @@ Materia prima libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2903,7 +2935,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2911,7 +2943,7 @@ Renta fija libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2919,7 +2951,11 @@ Propiedad inmobiliaria libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2935,7 +2971,7 @@ Bono libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2943,7 +2979,7 @@ Criptomoneda libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2951,7 +2987,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2959,7 +2995,7 @@ Fondo de inversión libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2967,7 +3003,7 @@ Metal precioso libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2975,7 +3011,7 @@ Capital riesgo libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2983,7 +3019,7 @@ Acción libs/ui/src/lib/i18n.ts - 62 + 64 @@ -2999,7 +3035,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3007,11 +3043,15 @@ Otros libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3027,15 +3067,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3047,7 +3087,7 @@ América del Norte libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3055,7 +3095,7 @@ África libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3063,7 +3103,15 @@ Asia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3071,7 +3119,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3087,7 +3135,7 @@ Oceanía libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3095,7 +3143,7 @@ América del Sur libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3139,7 +3187,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3175,11 +3223,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3187,7 +3235,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3203,7 +3251,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3215,7 +3263,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3231,7 +3279,7 @@ Validando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3255,7 +3303,7 @@ Datos del mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3311,7 +3359,7 @@ Anual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3319,7 +3367,7 @@ Importar dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3347,7 +3395,7 @@ Núcleo libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3355,7 +3403,7 @@ Conceder libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3363,7 +3411,7 @@ Mayor riesgo libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3371,7 +3419,7 @@ Menor riesgo libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3379,7 +3427,7 @@ Sin operaciones apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3387,7 +3435,7 @@ Provisión de jubilación libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3403,7 +3451,7 @@ Satélite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3527,7 +3575,7 @@ Mejorar plan apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3655,11 +3703,11 @@ No se pudo guardar el perfil del activo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3727,7 +3775,7 @@ Cambia a Ghostfolio Premium fácilmente libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3751,7 +3799,7 @@ Cambia a Ghostfolio Premium o Ghostfolio Open Source fácilmente libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3759,7 +3807,7 @@ Préstamo libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3803,7 +3851,7 @@ Renovar Plan apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3883,7 +3931,7 @@ Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3899,11 +3947,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3919,7 +3967,7 @@ Perfil del activo guardado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3927,7 +3975,7 @@ ¿Seguro que quieres eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3999,7 +4047,7 @@ Esta operación ya existe. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4063,7 +4111,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4071,7 +4119,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4079,7 +4127,7 @@ Meses libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4087,7 +4135,7 @@ Años libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4095,7 +4143,7 @@ Mes libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4103,7 +4151,7 @@ Año libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4263,7 +4311,15 @@ Pasivo libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4279,7 +4335,7 @@ Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4507,7 +4563,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4515,7 +4571,7 @@ Activo de valor libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4523,7 +4579,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4531,7 +4587,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4547,7 +4603,7 @@ Preestablecido libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4563,15 +4619,7 @@ Asia-Pacífico libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japón - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4767,7 +4815,7 @@ Divisas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4819,11 +4867,11 @@ No se pudo analizar la configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4914,6 +4962,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Usa Ghostfolio de forma anónima y sé dueño de tus datos financieros. @@ -5379,10 +5435,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5393,7 +5445,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5493,7 +5545,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5517,7 +5569,7 @@ ¿Seguro que quieres eliminar esta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5625,7 +5677,7 @@ ¿Seguro que quieres eliminar este perfil de activo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5636,6 +5688,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Añadir manualmente @@ -5665,7 +5725,7 @@ Último máximo histórico libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5709,7 +5769,7 @@ ¡Vaya! La transferencia del saldo de efectivo ha fallado. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5717,7 +5777,7 @@ Miedo extremo libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5725,7 +5785,7 @@ Codicia extrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5733,7 +5793,7 @@ Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5744,6 +5804,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? ¿Seguro que quieres eliminar este mensaje del sistema? @@ -5757,7 +5825,7 @@ Tendencia de 50 días libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5765,7 +5833,7 @@ Tendencia de 200 días libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5773,7 +5841,7 @@ Saldos de efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5809,7 +5877,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5817,7 +5885,7 @@ Prueba apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5857,15 +5925,7 @@ ¡Vaya! No se pudo otorgar acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5889,7 +5949,7 @@ Los datos del mercado tienen un retraso de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5905,11 +5965,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5929,7 +5989,7 @@ Cerrar posición apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5977,7 +6037,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5997,7 +6057,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6045,7 +6105,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6065,7 +6125,7 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6085,7 +6145,7 @@ Recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6150,7 +6210,7 @@ ¡Vaya! Parece que estás haciendo demasiadas solicitudes. Por favor, reduce la velocidad un poco. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6177,14 +6237,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Operación @@ -6222,7 +6274,7 @@ Esta acción no está permitida. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6230,7 +6282,7 @@ Liquidez libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6246,7 +6298,7 @@ Comprar y vender libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6326,7 +6378,7 @@ Incluir en apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6350,7 +6402,7 @@ Índices de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6366,7 +6418,7 @@ ¿Seguro que quieres eliminar estos perfiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6374,7 +6426,7 @@ ¡Vaya! No se pudieron eliminar los perfiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6573,38 +6625,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Bélgica - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Ver posición @@ -6613,124 +6633,12 @@ 474 - - Canada - Canadá - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - República Checa - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Francia - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Alemania - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italia - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Países Bajos - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nueva Zelanda - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polonia - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Rumanía - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Sudáfrica - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tailandia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Estados Unidos - - libs/ui/src/lib/i18n.ts - 103 - - Error Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6754,7 +6662,7 @@ ¡Vaya! No se pudo actualizar el acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6782,7 +6690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6834,7 +6742,7 @@ Cerrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6874,7 +6782,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6890,7 +6798,7 @@ libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7041,6 +6949,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year para utilizar nuestro enlace de recomendación y obtener una membresía de Ghostfolio Premium por un año @@ -7158,15 +7074,7 @@ Accede a más de 80.000 tickers de más de 50 bolsas libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ucrania - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7372,7 +7280,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7420,11 +7328,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7464,7 +7372,7 @@ El prompt para la IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7480,7 +7388,7 @@ Bajo demanda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7488,7 +7396,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7496,7 +7404,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7504,7 +7412,7 @@ Modo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7520,7 +7428,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7528,7 +7436,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7536,7 +7444,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7544,7 +7452,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7560,7 +7468,7 @@ Cambio libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7576,11 +7484,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7623,30 +7531,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Islas Vírgenes Británicas - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Términos y Condiciones @@ -7692,11 +7576,11 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7704,7 +7588,7 @@ ¿Seguro que quieres generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7715,14 +7599,6 @@ 239 - - United Kingdom - Reino Unido - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Términos de servicio @@ -7769,7 +7645,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7777,7 +7653,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ alguien apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ ¿Seguro que quieres eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ Cerrar sesión apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8293,7 +8169,7 @@ ¿Seguro que quieres generar un nuevo token de seguridad? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ Inversión alternativa libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ Coleccionable libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 11d7d0577..2cbba3820 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -118,7 +118,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -158,11 +158,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -190,7 +190,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -270,7 +270,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -350,7 +350,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -382,7 +382,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -458,7 +458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -542,7 +542,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -562,7 +562,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -638,7 +638,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -646,7 +646,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -658,15 +658,15 @@ Secteurs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -678,15 +678,15 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -694,7 +694,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -702,7 +702,7 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -842,7 +842,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -858,7 +858,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -894,11 +894,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -914,15 +914,15 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -938,11 +938,11 @@ Référence apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -958,7 +958,7 @@ À propos de Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -970,11 +970,11 @@ Se connecter apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -994,11 +994,11 @@ Oups! Jeton de Sécurité Incorrect. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1018,7 +1018,7 @@ Peur apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1026,7 +1026,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1034,7 +1034,7 @@ Avidité apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1042,7 +1042,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1161,6 +1161,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Rester connecté @@ -1290,7 +1298,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1298,7 +1306,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1318,7 +1326,7 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1330,7 +1338,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1342,7 +1350,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1362,7 +1370,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1374,7 +1382,7 @@ Cette fonctionnalité est momentanément indisponible. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -1382,15 +1390,15 @@ Veuillez réessayer plus tard. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -1398,11 +1406,11 @@ Oups! Quelque chose s’est mal passé. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -1414,11 +1422,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1430,11 +1438,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1466,7 +1474,7 @@ Mon Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1501,6 +1509,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Le code promotionnel a été appliqué @@ -1561,6 +1577,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vue de Présentation @@ -1590,7 +1614,7 @@ Paramètres régionaux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1710,15 +1734,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1766,7 +1790,7 @@ Données du marché apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -1778,11 +1802,11 @@ Contrôle Admin apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1958,7 +1982,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -2014,7 +2038,7 @@ Marchés apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2022,7 +2046,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -2090,7 +2114,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2122,7 +2146,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2146,7 +2170,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -2169,6 +2193,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Unit Price Prix Unitaire @@ -2186,7 +2218,7 @@ Import des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2194,7 +2226,7 @@ L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2210,7 +2242,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -2350,7 +2382,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2442,11 +2474,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -2470,7 +2502,7 @@ Mensuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2486,7 +2518,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2494,7 +2526,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2502,7 +2534,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -2510,7 +2542,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -2538,15 +2570,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2598,7 +2630,7 @@ Démarrer apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2686,11 +2718,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2742,7 +2774,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2778,7 +2810,7 @@ Importer Activités apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2842,7 +2874,7 @@ Différence avec le Record Historique libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2858,7 +2890,7 @@ par rapport au record historique libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2894,7 +2926,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2914,7 +2946,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -2930,7 +2962,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -2946,7 +2978,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2966,7 +2998,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2978,11 +3010,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2998,7 +3030,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3010,7 +3042,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3026,7 +3058,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3034,11 +3066,15 @@ Autre libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3062,11 +3098,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -3074,11 +3110,11 @@ Étiquette libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -3090,7 +3126,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -3098,7 +3134,7 @@ Marchandise libs/ui/src/lib/i18n.ts - 46 + 48 @@ -3110,7 +3146,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -3118,7 +3154,7 @@ Revenu Fixe libs/ui/src/lib/i18n.ts - 48 + 50 @@ -3126,7 +3162,11 @@ Immobilier libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -3142,7 +3182,7 @@ Obligation libs/ui/src/lib/i18n.ts - 53 + 55 @@ -3150,7 +3190,7 @@ Cryptomonnaie libs/ui/src/lib/i18n.ts - 56 + 58 @@ -3158,7 +3198,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -3166,7 +3206,7 @@ SICAV libs/ui/src/lib/i18n.ts - 59 + 61 @@ -3174,7 +3214,7 @@ Métal Précieux libs/ui/src/lib/i18n.ts - 60 + 62 @@ -3182,7 +3222,7 @@ Capital Propre libs/ui/src/lib/i18n.ts - 61 + 63 @@ -3190,7 +3230,7 @@ Action libs/ui/src/lib/i18n.ts - 62 + 64 @@ -3198,7 +3238,7 @@ Afrique libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3206,7 +3246,15 @@ Asie libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3214,7 +3262,7 @@ Europe libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3222,7 +3270,7 @@ Amérique du Nord libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3238,7 +3286,7 @@ Océanie libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3246,7 +3294,7 @@ Amérique du Sud libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3270,15 +3318,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3310,7 +3358,7 @@ Annuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3318,7 +3366,7 @@ Importer Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3394,7 @@ Core libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3354,7 +3402,7 @@ Donner libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3362,7 +3410,7 @@ Risque élevé libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3370,7 +3418,7 @@ Risque faible libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3378,7 +3426,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3386,7 +3434,7 @@ Réserve pour retraite libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3402,7 +3450,7 @@ Satellite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3526,7 +3574,7 @@ Mettre à niveau l’Abonnement apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3654,11 +3702,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3726,7 +3774,7 @@ Passez à Ghostfolio Premium facilement libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3750,7 +3798,7 @@ Passez à Ghostfolio Premium ou Ghostfolio Open Source facilement libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3758,7 +3806,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3802,7 +3850,7 @@ Renouveler l’Abonnement apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3882,7 +3930,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3898,11 +3946,11 @@ Lien apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3918,7 +3966,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3926,7 +3974,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3998,7 +4046,7 @@ Cette activité existe déjà. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4062,7 +4110,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4070,7 +4118,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4078,7 +4126,7 @@ Mois libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4086,7 +4134,7 @@ Années libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4094,7 +4142,7 @@ Mois libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4102,7 +4150,7 @@ Année libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4262,7 +4310,15 @@ Dette libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4278,7 +4334,7 @@ Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4506,7 +4562,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4514,7 +4570,7 @@ Actifs libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4522,7 +4578,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4530,7 +4586,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4546,7 +4602,7 @@ Configuration par défaut libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4562,15 +4618,7 @@ Asie-Pacifique libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japon - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4766,7 +4814,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4818,11 +4866,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4913,6 +4961,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Utilisez Ghostfolio de manière anonyme et soyez propriétaire de vos données financières. @@ -5378,10 +5434,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5392,7 +5444,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5492,7 +5544,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Confirmez la suppression de ce tag ? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Confirmez la suppressoion de ce profil d’actif? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Ajouter manuellement @@ -5664,7 +5724,7 @@ Dernier All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Oops, échec du transfert de la cash balance. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Extreme Peur libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Extreme Cupidité libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Neutre libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Confirmer la suppresion de ce message système? @@ -5756,7 +5824,7 @@ Tendance 50 jours libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ Tendance 200 jours libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Oops! Impossible d’accorder l’accès. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Les données du marché sont retardées de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Collecter les données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Oops! Il semble que vous fassiez trop de requêtes. Veuillez ralentir un peu. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Activitées @@ -6221,7 +6273,7 @@ Cette action n’est pas autorisée. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Liquiditées libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Achat et Vente libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Confirmer la suppression de ces Profils? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Oops! Echec de la suppression de Profils. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Australie - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Autriche - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgique - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgarie - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - République Tchèque - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlande - - libs/ui/src/lib/i18n.ts - 86 - - - - France - France - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Allemagne - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Inde - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italie - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Pays-Bas - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nouvelle-Zélande - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Pologne - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Roumanie - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Afrique du Sud - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thaïlande - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Etats-Unis - - libs/ui/src/lib/i18n.ts - 103 - - Error Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Fermer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Oui libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7157,15 +7073,7 @@ Accédez à plus de 80 000 symboles financiers issus de plus de 50 marchés boursiers. libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Moi apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selecteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Arménie - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Îles Vierges britanniques - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapour - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Conditions générales @@ -7691,11 +7575,11 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Royaume-Uni - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Conditions d’utilisation @@ -7768,7 +7644,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ quelqu’un apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Se déconnecter apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Investissement alternatif libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Objet de collection libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 7496bb8f9..82844588f 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -111,7 +111,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -151,11 +151,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -215,7 +215,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -295,7 +295,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -335,7 +335,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -403,7 +403,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -499,7 +499,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -631,7 +631,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -647,7 +647,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -691,7 +691,7 @@ Informazioni su Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -703,7 +703,7 @@ Inizia apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -735,11 +735,11 @@ Accedi apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -759,11 +759,11 @@ Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -870,6 +870,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Rimani connesso @@ -963,15 +971,15 @@ Settori apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -983,15 +991,15 @@ Paesi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1015,7 +1023,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1027,7 +1035,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1043,7 +1051,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1063,7 +1071,7 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1075,7 +1083,7 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1087,7 +1095,7 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1107,7 +1115,7 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1123,11 +1131,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1139,11 +1147,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1175,7 +1183,7 @@ Il mio Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1198,6 +1206,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Il codice del buono è stato riscattato @@ -1258,6 +1274,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista presentatore @@ -1279,7 +1303,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1367,15 +1391,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1419,7 +1443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1487,11 +1511,11 @@ Controllo amministrativo apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1655,7 +1679,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1683,7 +1707,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1711,7 +1735,7 @@ Mercati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1719,7 +1743,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1855,7 +1879,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1871,7 +1895,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1931,7 +1955,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1955,7 +1979,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1978,6 +2002,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Quantità @@ -1995,7 +2027,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2015,7 +2047,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2059,7 +2091,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2083,7 +2115,7 @@ Importazione dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2091,7 +2123,7 @@ L’importazione è stata completata apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2111,15 +2143,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2139,15 +2171,15 @@ Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2223,11 +2255,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2275,7 +2307,7 @@ Importa le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2339,7 +2371,7 @@ Variazione rispetto al massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2355,7 +2387,7 @@ dal massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2387,7 +2419,7 @@ Questa funzionalità non è attualmente disponibile. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2395,11 +2427,11 @@ Ops! Qualcosa è andato storto. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2407,15 +2439,15 @@ Riprova più tardi. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2427,7 +2459,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2499,7 +2531,7 @@ Paese apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2507,7 +2539,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2555,7 +2587,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2579,7 +2611,7 @@ Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2603,7 +2635,7 @@ Paura apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2611,7 +2643,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2619,7 +2651,7 @@ Avidità apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2627,7 +2659,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2635,7 +2667,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2671,11 +2703,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2683,11 +2715,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2763,7 +2795,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2795,7 +2827,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2815,7 +2847,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2827,11 +2859,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2855,11 +2887,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2867,11 +2899,11 @@ Etichetta libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2883,7 +2915,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2891,7 +2923,7 @@ Materia prima libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2903,7 +2935,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2911,7 +2943,7 @@ Reddito fisso libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2919,7 +2951,11 @@ Immobiliare libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2935,7 +2971,7 @@ Obbligazioni libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2943,7 +2979,7 @@ Criptovaluta libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2951,7 +2987,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2959,7 +2995,7 @@ Fondo comune di investimento libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2967,7 +3003,7 @@ Metalli preziosi libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2975,7 +3011,7 @@ Azione ordinaria privata libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2983,7 +3019,7 @@ Azione libs/ui/src/lib/i18n.ts - 62 + 64 @@ -2999,7 +3035,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3007,11 +3043,15 @@ Altro libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3027,15 +3067,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3047,7 +3087,7 @@ Nord America libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3055,7 +3095,7 @@ Africa libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3063,7 +3103,15 @@ Asia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3071,7 +3119,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3087,7 +3135,7 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3095,7 +3143,7 @@ Sud America libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3139,7 +3187,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3175,11 +3223,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3187,7 +3235,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3203,7 +3251,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3215,7 +3263,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3231,7 +3279,7 @@ Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3255,7 +3303,7 @@ Dati del mercato apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3311,7 +3359,7 @@ Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3319,7 +3367,7 @@ Importa i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3347,7 +3395,7 @@ Nucleo libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3355,7 +3403,7 @@ Sovvenzione libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3363,7 +3411,7 @@ Rischio più elevato libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3371,7 +3419,7 @@ Rischio inferiore libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3379,7 +3427,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3387,7 +3435,7 @@ Fondo pensione libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3403,7 +3451,7 @@ Satellite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3527,7 +3575,7 @@ Aggiorna il piano apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3655,11 +3703,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3727,7 +3775,7 @@ Passa facilmente a Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3751,7 +3799,7 @@ Passa facilmente a Ghostfolio Premium o Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3759,7 +3807,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3803,7 +3851,7 @@ Rinnova il piano apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3883,7 +3931,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3899,11 +3947,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3919,7 +3967,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3927,7 +3975,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3999,7 +4047,7 @@ Questa attività esiste già. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4063,7 +4111,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4071,7 +4119,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4079,7 +4127,7 @@ Mesi libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4087,7 +4135,7 @@ Anni libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4095,7 +4143,7 @@ Mese libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4103,7 +4151,7 @@ Anno libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4263,7 +4311,15 @@ Passività libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4279,7 +4335,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4507,7 +4563,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4515,7 +4571,7 @@ Prezioso libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4523,7 +4579,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4531,7 +4587,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4547,7 +4603,7 @@ Preimpostato libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4563,15 +4619,7 @@ Asia e Pacifico libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Giappone - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4767,7 +4815,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4819,11 +4867,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4914,6 +4962,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Usa Ghostfolio in modo anonimo e possiedi i tuoi dati finanziari. @@ -5379,10 +5435,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5393,7 +5445,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5493,7 +5545,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5517,7 +5569,7 @@ Sei sicuro di voler eliminare questo tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5625,7 +5677,7 @@ Vuoi veramente eliminare il profilo di questo asset? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5636,6 +5688,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Aggiungi manualmente @@ -5665,7 +5725,7 @@ Ultimo massimo storico libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5709,7 +5769,7 @@ Ops, il trasferimento del saldo di cassa è fallito. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5717,7 +5777,7 @@ Paura estrema libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5725,7 +5785,7 @@ Avidità estrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5733,7 +5793,7 @@ Neutrale libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5744,6 +5804,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Confermi di voler cancellare questo messaggio di sistema? @@ -5757,7 +5825,7 @@ Trend a 50 giorni libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5765,7 +5833,7 @@ Trend a 200 giorni libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5773,7 +5841,7 @@ Saldi di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5809,7 +5877,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5817,7 +5885,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5857,15 +5925,7 @@ Ops! Impossibile abilitare l’accesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5889,7 +5949,7 @@ I dati di mercato sono ritardati di apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5905,11 +5965,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5929,7 +5989,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5977,7 +6037,7 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5997,7 +6057,7 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6045,7 +6105,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6065,7 +6125,7 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6085,7 +6145,7 @@ Raccolta Dati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6150,7 +6210,7 @@ Ops! Sembra tu stia facendo troppe richieste. Rallenta un po’ per favore. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6177,14 +6237,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Attività @@ -6222,7 +6274,7 @@ Questa azione non è permessa. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6230,7 +6282,7 @@ Liquidità libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6246,7 +6298,7 @@ Compra e vendi libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6326,7 +6378,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6350,7 +6402,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6366,7 +6418,7 @@ Confermi di voler eliminare questi profili? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6374,7 +6426,7 @@ Ops! Impossibile eliminare i profili. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6573,38 +6625,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgio - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6613,124 +6633,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Repubblica Ceca - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Francia - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Germania - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italia - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Olanda - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nuova Zelanda - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polonia - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romania - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Sud Africa - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tailandia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Stati Uniti - - libs/ui/src/lib/i18n.ts - 103 - - Error Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6754,7 +6662,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6782,7 +6690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6834,7 +6742,7 @@ Chiudi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6874,7 +6782,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6890,7 +6798,7 @@ Si libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7041,6 +6949,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7158,15 +7074,7 @@ Ottieni accesso a oltre 80’000+ titoli da oltre 50 borse libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ucraina - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7372,7 +7280,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7420,11 +7328,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7464,7 +7372,7 @@ L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7480,7 +7388,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7488,7 +7396,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7496,7 +7404,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7504,7 +7412,7 @@ Modalità apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ Selettore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7520,7 +7428,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7528,7 +7436,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7536,7 +7444,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7544,7 +7452,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7560,7 +7468,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7576,11 +7484,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7623,30 +7531,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Isole Vergini Britanniche - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Termini e condizioni @@ -7692,11 +7576,11 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7704,7 +7588,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7715,14 +7599,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Termini e condizioni @@ -7769,7 +7645,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7777,7 +7653,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ qualcuno apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ Esci apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8293,7 +8169,7 @@ Vuoi davvero generare un nuovo token di sicurezza? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ Investimenti alternativi libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ Da collezione libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index c0e3501a5..07a6daa1d 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -340,7 +340,7 @@ 현금 잔액 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -364,7 +364,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -404,11 +404,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -436,7 +436,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -500,7 +500,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -580,7 +580,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -632,7 +632,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -768,7 +768,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -788,7 +788,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -796,7 +796,7 @@ 이 자산 프로필을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -804,7 +804,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -899,6 +899,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh 새로고침 @@ -948,7 +956,7 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -956,7 +964,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -968,15 +976,15 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -988,15 +996,15 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1004,7 +1012,15 @@ 심볼 매핑 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -1020,7 +1036,7 @@ 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1028,7 +1044,7 @@ 메모 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1055,6 +1071,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually 수동 추가 @@ -1083,6 +1107,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? 이 쿠폰을 정말 삭제하시겠습니까? @@ -1220,11 +1252,11 @@ 링크 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1240,7 +1272,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1248,7 +1280,7 @@ 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1280,7 +1312,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1328,7 +1360,7 @@ 이 태그를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1352,7 +1384,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1368,7 +1400,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1420,11 +1452,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1448,15 +1480,15 @@ 포트폴리오 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1472,11 +1504,11 @@ 기준 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1492,7 +1524,7 @@ 고스트폴리오 소개 apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1504,11 +1536,11 @@ 로그인 apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1528,11 +1560,11 @@ 이런! 잘못된 보안 토큰. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1552,7 +1584,7 @@ 두려움 apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1560,7 +1592,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1568,7 +1600,7 @@ 탐욕 apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1576,7 +1608,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1676,7 +1708,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1795,6 +1827,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in 로그인 상태 유지 @@ -1956,7 +1996,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1964,7 +2004,7 @@ 데이터 결함 보고 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -2112,7 +2152,7 @@ 업그레이드 계획 apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -2152,7 +2192,7 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2164,7 +2204,7 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2176,7 +2216,7 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2196,7 +2236,7 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2243,6 +2283,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed 쿠폰 코드가 사용되었습니다. @@ -2315,6 +2363,14 @@ 279 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View 발표자 보기 @@ -2352,7 +2408,7 @@ 장소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2480,7 +2536,7 @@ 이 기능은 현재 사용할 수 없습니다. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2488,15 +2544,15 @@ 나중에 다시 시도해 주세요. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2504,11 +2560,11 @@ 이런! 문제가 발생했습니다. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2520,11 +2576,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2536,11 +2592,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2644,15 +2700,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2676,7 +2732,7 @@ 죄송합니다. 현금 잔액 이체가 실패했습니다. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2732,11 +2788,11 @@ 관리자 제어 apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2748,7 +2804,7 @@ 시장 데이터 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2800,7 +2856,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2940,11 +2996,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -3000,7 +3056,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -3120,7 +3176,7 @@ 시작하기 apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3192,7 +3248,7 @@ 시장 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3200,7 +3256,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3363,6 +3419,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. 익명으로 Ghostfolio를 사용하고 금융 데이터를 소유하세요. @@ -3708,7 +3772,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3820,7 +3884,7 @@ 활동 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3836,7 +3900,7 @@ 배당금 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3852,7 +3916,7 @@ 데이터 가져오는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3860,7 +3924,7 @@ 가져오기가 완료되었습니다. apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3876,7 +3940,7 @@ 데이터 유효성을 검사하는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4060,7 +4124,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4176,11 +4240,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4204,7 +4268,7 @@ 월간 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4212,7 +4276,7 @@ 매년 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4228,7 +4292,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4236,7 +4300,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4244,7 +4308,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4252,7 +4316,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4260,7 +4324,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4268,7 +4332,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4296,15 +4360,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4468,7 +4532,7 @@ 플랜 갱신 apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4492,11 +4556,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4867,10 +4931,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4881,7 +4941,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4893,11 +4953,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4945,7 +5005,7 @@ 나의 고스트폴리오 apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5057,7 +5117,7 @@ 50일 추세 libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5065,7 +5125,7 @@ 200일 추세 libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5081,7 +5141,7 @@ 마지막 역대 최고치 libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5089,7 +5149,7 @@ 역대 최고치에서 변화 libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5105,7 +5165,7 @@ ATH에서 libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5113,7 +5173,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5173,7 +5233,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5193,7 +5253,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5209,7 +5269,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5225,7 +5285,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5237,7 +5297,7 @@ 아시아·태평양 libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5253,7 +5313,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5265,11 +5325,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5285,7 +5345,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5297,7 +5357,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5305,7 +5365,7 @@ 핵심 libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5313,7 +5373,7 @@ Ghostfolio 프리미엄 또는 Ghostfolio Open Source로 쉽게 전환하세요 libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5321,7 +5381,7 @@ Ghostfolio 프리미엄으로 쉽게 전환하세요 libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5337,7 +5397,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5345,7 +5405,7 @@ 승인하다 libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5353,7 +5413,7 @@ 더 높은 위험 libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5361,15 +5421,7 @@ 이 활동은 이미 존재합니다. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - 일본 - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5377,7 +5429,7 @@ 위험 감소 libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5385,7 +5437,7 @@ libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5393,7 +5445,7 @@ 개월 libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5401,11 +5453,15 @@ 다른 libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5413,7 +5469,7 @@ 프리셋 libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5421,7 +5477,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5429,7 +5485,7 @@ 퇴직금 libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5445,7 +5501,7 @@ 위성 libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5469,11 +5525,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5481,11 +5537,11 @@ 꼬리표 libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5493,7 +5549,7 @@ 년도 libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5513,7 +5569,7 @@ 연령 libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5533,7 +5589,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5549,7 +5605,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5557,7 +5613,7 @@ 귀중한 libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5565,7 +5621,7 @@ 책임 libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5577,7 +5633,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5589,7 +5645,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5597,7 +5653,7 @@ 상품 libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5609,7 +5665,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5617,7 +5673,7 @@ 채권 libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5625,7 +5681,11 @@ 부동산 libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5641,7 +5701,7 @@ 노예 libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5649,7 +5709,7 @@ 암호화폐 libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5657,7 +5717,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5665,7 +5725,7 @@ 뮤추얼 펀드 libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5673,7 +5733,7 @@ 귀금속 libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5681,7 +5741,7 @@ 사모펀드 libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5689,7 +5749,7 @@ 재고 libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5697,7 +5757,7 @@ 아프리카 libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5705,7 +5765,15 @@ 아시아 libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5713,7 +5781,7 @@ 유럽 libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5721,7 +5789,7 @@ 북미 libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5737,7 +5805,7 @@ 오세아니아 libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5745,7 +5813,7 @@ 남아메리카 libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5753,7 +5821,7 @@ 극심한 공포 libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5761,7 +5829,7 @@ 극도의 탐욕 libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5769,7 +5837,7 @@ 중립적 libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5805,15 +5873,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5841,7 +5909,7 @@ 현재 시장가격은 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5849,7 +5917,7 @@ 시험 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5857,15 +5925,7 @@ 이런! 액세스 권한을 부여할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - 아르헨티나 - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5913,7 +5973,7 @@ 시장 데이터가 지연됩니다. apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5929,7 +5989,7 @@ 닫기 보유 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5953,11 +6013,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6017,7 +6077,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6029,7 +6089,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6069,7 +6129,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6089,7 +6149,7 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6134,7 +6194,7 @@ 데이터 수집 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6174,7 +6234,7 @@ 이런! 요청을 너무 많이 하시는 것 같습니다. 조금 천천히 해주세요. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6201,14 +6261,6 @@ 61 - - Indonesia - 인도네시아 공화국 - - libs/ui/src/lib/i18n.ts - 90 - - Activity 활동 @@ -6238,7 +6290,7 @@ 이 작업은 허용되지 않습니다. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6254,7 +6306,7 @@ 유동성 libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6262,7 +6314,7 @@ 구매 및 판매 libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6350,7 +6402,7 @@ 포함 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6374,7 +6426,7 @@ 이 프로필을 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6390,7 +6442,7 @@ 이런! 프로필을 삭제할 수 없습니다. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6398,7 +6450,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6493,46 +6545,6 @@ 86 - - Thailand - 태국 - - libs/ui/src/lib/i18n.ts - 100 - - - - India - 인도 - - libs/ui/src/lib/i18n.ts - 89 - - - - Austria - 오스트리아 - - libs/ui/src/lib/i18n.ts - 80 - - - - Poland - 폴란드 - - libs/ui/src/lib/i18n.ts - 95 - - - - Italy - 이탈리아 - - libs/ui/src/lib/i18n.ts - 91 - - User Experience 사용자 경험 @@ -6581,30 +6593,6 @@ 474 - - Canada - 캐나다 - - libs/ui/src/lib/i18n.ts - 84 - - - - New Zealand - 뉴질랜드 - - libs/ui/src/lib/i18n.ts - 94 - - - - Netherlands - 네덜란드 - - libs/ui/src/lib/i18n.ts - 93 - - Alternative 대안 @@ -6641,30 +6629,6 @@ 96 - - Romania - 루마니아 - - libs/ui/src/lib/i18n.ts - 96 - - - - Germany - 독일 - - libs/ui/src/lib/i18n.ts - 88 - - - - United States - 미국 - - libs/ui/src/lib/i18n.ts - 103 - - Budgeting 예산 편성 @@ -6673,14 +6637,6 @@ 85 - - Belgium - 벨기에 - - libs/ui/src/lib/i18n.ts - 81 - - Open Source 오픈 소스 @@ -6693,38 +6649,6 @@ 91 - - Czech Republic - 체코 - - libs/ui/src/lib/i18n.ts - 85 - - - - Australia - 호주 - - libs/ui/src/lib/i18n.ts - 79 - - - - South Africa - 남아프리카 - - libs/ui/src/lib/i18n.ts - 98 - - - - Bulgaria - 불가리아 - - libs/ui/src/lib/i18n.ts - 83 - - Privacy 은둔 @@ -6733,28 +6657,12 @@ 94 - - Finland - 핀란드 - - libs/ui/src/lib/i18n.ts - 86 - - - - France - 프랑스 - - libs/ui/src/lib/i18n.ts - 87 - - Error 오류 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6766,7 +6674,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6810,7 +6718,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 33 + 35 @@ -6850,7 +6758,7 @@ 닫다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6890,7 +6798,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6906,7 +6814,7 @@ 이런! 액세스를 업데이트할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -7057,6 +6965,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year 추천 링크를 사용하고 1년 동안 Ghostfolio 프리미엄 멤버십을 얻으려면 @@ -7161,14 +7077,6 @@ 40 - - Ukraine - 우크라이나 - - libs/ui/src/lib/i18n.ts - 101 - - Set API key API 키 설정 @@ -7182,7 +7090,7 @@ 50개 이상의 거래소에서 80,000개 이상의 티커에 접근하세요 libs/ui/src/lib/i18n.ts - 25 + 27 @@ -7396,7 +7304,7 @@ 구하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7460,11 +7368,11 @@ apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7488,7 +7396,7 @@ AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7504,7 +7412,7 @@ 방법 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7520,7 +7428,7 @@ 선택자 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7528,7 +7436,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7536,7 +7444,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7544,7 +7452,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7552,7 +7460,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7560,7 +7468,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7568,7 +7476,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7584,7 +7492,7 @@ 변화 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7600,11 +7508,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7631,14 +7539,6 @@ 67 - - Singapore - 싱가포르 - - libs/ui/src/lib/i18n.ts - 97 - - Total amount Total amount @@ -7647,22 +7547,6 @@ 94 - - Armenia - 아르메니아 - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - 영국령 버진아일랜드 - - libs/ui/src/lib/i18n.ts - 82 - - Copy portfolio data to clipboard for AI prompt AI 프롬프트를 위해 포트폴리오 데이터를 클립보드에 복사 @@ -7716,7 +7600,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7724,11 +7608,11 @@ 보안 토큰 apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7739,14 +7623,6 @@ 239 - - United Kingdom - 영국 - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service 이용약관 @@ -7793,7 +7669,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7801,7 +7677,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ 누구 apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ 이 항목을 정말로 삭제하시겠습니까? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ 로그아웃 apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8309,7 +8185,7 @@ 정말로 새로운 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ 자산 프로필 관리 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ 대체투자 libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ 소장용 libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ 평균단가 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index b33aee404..eab63de12 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -110,7 +110,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -150,11 +150,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -214,7 +214,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -294,7 +294,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -334,7 +334,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -402,7 +402,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -498,7 +498,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -630,7 +630,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -646,7 +646,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -690,7 +690,7 @@ Over Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -702,7 +702,7 @@ Aan de slag apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -734,11 +734,11 @@ Aanmelden apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -758,11 +758,11 @@ Oeps! Onjuiste beveiligingstoken. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -869,6 +869,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Aangemeld blijven @@ -962,15 +970,15 @@ Sectoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -982,15 +990,15 @@ Landen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1014,7 +1022,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1026,7 +1034,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1042,7 +1050,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1062,7 +1070,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1074,7 +1082,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1086,7 +1094,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1106,7 +1114,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1122,11 +1130,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1138,11 +1146,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1174,7 +1182,7 @@ Mijn Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1197,6 +1205,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Je couponcode is ingewisseld @@ -1257,6 +1273,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Presentatie weergave @@ -1278,7 +1302,7 @@ Locatie apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1366,15 +1390,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1418,7 +1442,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1486,11 +1510,11 @@ Beheer apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1654,7 +1678,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1682,7 +1706,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1710,7 +1734,7 @@ Markten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1718,7 +1742,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1854,7 +1878,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1870,7 +1894,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1930,7 +1954,7 @@ Huidige week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1954,7 +1978,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1977,6 +2001,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Hoeveelheid @@ -1994,7 +2026,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2014,7 +2046,7 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2058,7 +2090,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2082,7 +2114,7 @@ Gegevens importeren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2090,7 +2122,7 @@ Importeren is voltooid apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2110,15 +2142,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2138,15 +2170,15 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2222,11 +2254,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2274,7 +2306,7 @@ Activiteiten importeren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2338,7 +2370,7 @@ Verandering van Recordhoogte libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2354,7 +2386,7 @@ van ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2386,7 +2418,7 @@ Deze functie is momenteel niet beschikbaar. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2394,11 +2426,11 @@ Oeps! Er ging iets mis. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2406,15 +2438,15 @@ Probeer het later nog eens. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2426,7 +2458,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2498,7 +2530,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2506,7 +2538,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2554,7 +2586,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2578,7 +2610,7 @@ Maandelijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2602,7 +2634,7 @@ Angst apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2610,7 +2642,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2618,7 +2650,7 @@ Hebzucht apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2626,7 +2658,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2634,7 +2666,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2670,11 +2702,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2682,11 +2714,11 @@ Het formulier kon niet worden gevalideerd. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2762,7 +2794,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2794,7 +2826,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2814,7 +2846,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2826,11 +2858,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2854,11 +2886,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2866,11 +2898,11 @@ Label libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2882,7 +2914,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2890,7 +2922,7 @@ Grondstof libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2902,7 +2934,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2910,7 +2942,7 @@ Vast inkomen libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2918,7 +2950,11 @@ Vastgoed libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2934,7 +2970,7 @@ Obligatie libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2942,7 +2978,7 @@ Cryptovaluta libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2950,7 +2986,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2958,7 +2994,7 @@ Beleggingsfonds libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2966,7 +3002,7 @@ Edelmetaal libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2974,7 +3010,7 @@ Private equity libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2982,7 +3018,7 @@ Aandeel libs/ui/src/lib/i18n.ts - 62 + 64 @@ -2998,7 +3034,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3006,11 +3042,15 @@ Anders libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3026,15 +3066,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3046,7 +3086,7 @@ Noord-Amerika libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3054,7 +3094,7 @@ Afrika libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3062,7 +3102,15 @@ Azië libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3070,7 +3118,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3086,7 +3134,7 @@ Oceanië libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3094,7 +3142,7 @@ Zuid-Amerika libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3138,7 +3186,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3174,11 +3222,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3186,7 +3234,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3202,7 +3250,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3214,7 +3262,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3230,7 +3278,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3254,7 +3302,7 @@ Marktgegevens apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3310,7 +3358,7 @@ Jaarlijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3318,7 +3366,7 @@ Importeer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3394,7 @@ Kern libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3354,7 +3402,7 @@ Toelage libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3362,7 +3410,7 @@ Hoger risico libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3370,7 +3418,7 @@ Lager risico libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3378,7 +3426,7 @@ Geen activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3386,7 +3434,7 @@ Pensioen libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3402,7 +3450,7 @@ Satelliet libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3526,7 +3574,7 @@ Abonnement uitbreiden apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3654,11 +3702,11 @@ Kon het assetprofiel niet opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3726,7 +3774,7 @@ Eenvoudig overstappen naar Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3750,7 +3798,7 @@ Eenvoudig overstappen naar Ghostfolio Premium of Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3758,7 +3806,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3802,7 +3850,7 @@ Abonnement Vernieuwen apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3882,7 +3930,7 @@ Huidig jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3898,11 +3946,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3918,7 +3966,7 @@ Het activaprofiel is opgeslagen. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3926,7 +3974,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3998,7 +4046,7 @@ Deze activiteit bestaat al. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4062,7 +4110,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4070,7 +4118,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4078,7 +4126,7 @@ Maanden libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4086,7 +4134,7 @@ Jaren libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4094,7 +4142,7 @@ Maand libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4102,7 +4150,7 @@ Jaar libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4262,7 +4310,15 @@ Verplichtingen libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4278,7 +4334,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4506,7 +4562,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4514,7 +4570,7 @@ Waardevol libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4522,7 +4578,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4530,7 +4586,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4546,7 +4602,7 @@ Voorinstelling libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4562,15 +4618,7 @@ Azië en de Stille Oceaan libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japan - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4766,7 +4814,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4818,11 +4866,11 @@ De scraperconfiguratie kon niet worden geparseerd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4913,6 +4961,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Gebruik Ghostfolio anoniem en bezit je financiële gegevens. @@ -5378,10 +5434,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5392,7 +5444,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5492,7 +5544,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Weet u zetker dat u dit label wilt verwijderen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Weet u zeker dat u dit bezittingen profiel wilt verwijderen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Voeg Handmatig Toe @@ -5664,7 +5724,7 @@ Laatste Recordhoogte libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Oeps, geldoverdracht is mislukt. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Extreme Hebzucht libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Neutraal libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Wilt u dit systeembericht echt verwijderen? @@ -5756,7 +5824,7 @@ 50-Daagse Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ 200-Daagse Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Contant Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Oeps! Kan geen toegang verlenen. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentinië - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Markt data is vertraagd voor apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Sluit Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Data Verzamelen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Oeps! Het lijkt er op dat u te veel verzoeken indient. Doe het iets rustiger aan alstublieft. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonesië - - libs/ui/src/lib/i18n.ts - 90 - - Activity Activiteit @@ -6221,7 +6273,7 @@ Deze actie is niet toegestaan. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Liquiditeit libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Aan- en Verkoop libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Opnemen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Wilt u deze profielen echt verwijderen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Oeps! Verwijderen van de profielen is mislukt. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Australië - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Oostenrijk - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - België - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgarije - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Bekijk Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Tsjechische Republiek - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Frankrijk - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Duitsland - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italië - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Nederland - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nieuw-Zeeland - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polen - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Roemenië - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Zuid-Afrika - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Verenigde Station - - libs/ui/src/lib/i18n.ts - 103 - - Error Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Oops! Kan de toegang niet updaten. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Sluiten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Ja libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7157,15 +7073,7 @@ Krijg toegang tot meer dan 80.000 tickers van meer dan 50 beurzen libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Oekraïne - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Ik apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Kiezer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenië - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Britse Maagdeneilanden - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Algemene Voorwaarden @@ -7691,11 +7575,11 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Verenigd Koninkrijk - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Servicevoorwaarden @@ -7768,7 +7644,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ iemand apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Uitloggen apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Huidige maand apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Wilt u echt een nieuwe securitytoken genereren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternatieve belegging libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Verzamelobject libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index b48149e75..7dde9b9e0 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -355,7 +355,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -395,11 +395,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -427,7 +427,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -491,7 +491,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -571,7 +571,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -599,7 +599,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -623,7 +623,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -759,7 +759,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -771,7 +771,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -779,7 +779,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -787,7 +787,7 @@ Czy na pewno chcesz usunąć ten profil aktywów? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -795,7 +795,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -815,7 +815,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -874,6 +874,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh Odśwież @@ -915,7 +923,7 @@ Kraj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -923,7 +931,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -935,15 +943,15 @@ Sektory apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -955,15 +963,15 @@ Kraje apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -971,7 +979,15 @@ Mapowanie Symboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -987,7 +1003,7 @@ Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -995,7 +1011,7 @@ Notatka apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1022,6 +1038,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Dodaj Ręcznie @@ -1050,6 +1074,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? Czy naprawdę chcesz usunąć ten kupon? @@ -1187,11 +1219,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1207,7 +1239,7 @@ Profil zasobu został zapisany apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1215,7 +1247,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1247,7 +1279,7 @@ Obecny rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1295,7 +1327,7 @@ Czy naprawdę chcesz usunąć ten tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1319,7 +1351,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1335,7 +1367,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1387,11 +1419,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1415,15 +1447,15 @@ Portfel apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1439,11 +1471,11 @@ Poziom Odniesienia (Benchmark) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1459,7 +1491,7 @@ O Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1471,11 +1503,11 @@ Zaloguj się apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1495,11 +1527,11 @@ Ups! Nieprawidłowy token bezpieczeństwa. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1519,7 +1551,7 @@ Zagrożenie apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1527,7 +1559,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1535,7 +1567,7 @@ Zachłanność apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1543,7 +1575,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1643,7 +1675,7 @@ Obecny tydzień apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1762,6 +1794,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Pozostań zalogowany @@ -1923,7 +1963,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1931,7 +1971,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -2079,7 +2119,7 @@ Ulepsz Plan apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -2119,7 +2159,7 @@ Liczony od początku roku (year-to-date) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2131,7 +2171,7 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2143,7 +2183,7 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2163,7 +2203,7 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2210,6 +2250,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Kupon został zrealizowany @@ -2282,6 +2330,14 @@ 279 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Widok Prezentera @@ -2319,7 +2375,7 @@ Ustawienia Regionalne apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2447,7 +2503,7 @@ Ta funkcja jest obecnie niedostępna. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2455,15 +2511,15 @@ Spróbuj ponownie później. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2471,11 +2527,11 @@ Ups! Coś poszło nie tak. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2487,11 +2543,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2503,11 +2559,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2611,15 +2667,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2643,7 +2699,7 @@ Ups, transfer salda nie powiódł się. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2699,11 +2755,11 @@ Panel Administratora apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2715,7 +2771,7 @@ Dane Rynkowe apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2767,7 +2823,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2907,11 +2963,11 @@ Nie udało się przetworzyć konfiguracji scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2967,7 +3023,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -3087,7 +3143,7 @@ Rozpocznij apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3159,7 +3215,7 @@ Rynki apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3167,7 +3223,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3330,6 +3386,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Korzystaj z Ghostfolio anonimowo i zachowaj pełną kontrolę nad swoimi danymi finansowymi. @@ -3675,7 +3739,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3787,7 +3851,7 @@ Importuj Aktywności apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3803,7 +3867,7 @@ Impotruj Dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3819,7 +3883,7 @@ Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3827,7 +3891,7 @@ Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3843,7 +3907,7 @@ Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4027,7 +4091,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4143,11 +4207,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4171,7 +4235,7 @@ Miesięcznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4179,7 +4243,7 @@ Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4195,7 +4259,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4203,7 +4267,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4211,7 +4275,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4219,7 +4283,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4227,7 +4291,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4235,7 +4299,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4263,15 +4327,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4435,7 +4499,7 @@ Odnów Plan apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4459,11 +4523,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4822,10 +4886,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4836,7 +4896,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4848,11 +4908,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4900,7 +4960,7 @@ Moje Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5012,7 +5072,7 @@ Ostatni Najwyższy Punkt w Historii libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5020,7 +5080,7 @@ Zmiana od Najwyższego Punktu w Historii libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5036,7 +5096,7 @@ od ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5044,7 +5104,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5104,7 +5164,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5124,7 +5184,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5140,7 +5200,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5156,7 +5216,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5168,7 +5228,7 @@ Azja-Pacyfik libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5184,7 +5244,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5196,11 +5256,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5216,7 +5276,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5228,7 +5288,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5236,7 +5296,7 @@ Główny libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5244,7 +5304,7 @@ Przełącz się z łatwością na Ghostfolio Premium lub Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5252,7 +5312,7 @@ Przełącz się z łatwością na Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5268,7 +5328,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5276,7 +5336,7 @@ Dotacja libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5284,7 +5344,7 @@ Wyższe Ryzyko libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5292,15 +5352,7 @@ Ta działalność już istnieje. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - Japonia - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5308,7 +5360,7 @@ Niższe Ryzyko libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5316,7 +5368,7 @@ Miesiąc libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5324,7 +5376,7 @@ Miesiące libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5332,11 +5384,15 @@ Inne libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5344,7 +5400,7 @@ Wstępnie ustawione libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5352,7 +5408,7 @@ Brak transakcji apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5360,7 +5416,7 @@ Świadczenia Emerytalne libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5376,7 +5432,7 @@ Satelita libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5400,11 +5456,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5412,11 +5468,11 @@ Tag libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5424,7 +5480,7 @@ Rok libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5444,7 +5500,7 @@ Lata libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5464,7 +5520,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5480,7 +5536,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5488,7 +5544,7 @@ Kosztowności libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5496,7 +5552,7 @@ Zobowiązanie libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5508,7 +5564,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5520,7 +5576,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5528,7 +5584,7 @@ Towar libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5540,7 +5596,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5548,7 +5604,7 @@ Stały Dochód libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5556,7 +5612,11 @@ Nieruchomość libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5572,7 +5632,7 @@ Obligacja libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5580,7 +5640,7 @@ Kryptowaluta libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5588,7 +5648,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5596,7 +5656,7 @@ Fundusz Wzajemny libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5604,7 +5664,7 @@ Metal Szlachetny libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5612,7 +5672,7 @@ Prywatny Kapitał libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5620,7 +5680,7 @@ Akcje libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5628,7 +5688,7 @@ Afryka libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5636,7 +5696,15 @@ Azja libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5644,7 +5712,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5652,7 +5720,7 @@ Ameryka Północna libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5668,7 +5736,7 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5676,7 +5744,7 @@ Ameryka Południowa libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5684,7 +5752,7 @@ Skrajny Strach libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5692,7 +5760,7 @@ Skrajna Zachłanność libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5700,7 +5768,7 @@ Neutralny libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5736,15 +5804,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5756,7 +5824,7 @@ 50-Dniowy Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ 200-Dniowy Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Salda Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Ups! Nie udało się przyznać dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentyna - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Dane rynkowe są opóźnione o apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Zamknij pozycję apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Gromadzenie Danych apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Ups! Wygląda na to, że wykonujesz zbyt wiele zapytań. Proszę, zwolnij trochę. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonezja - - libs/ui/src/lib/i18n.ts - 90 - - Activity Aktywność @@ -6221,7 +6273,7 @@ To działanie jest niedozwolone. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Płynność środków finansowych libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Kupno i Sprzedaż libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Uwzględnij w apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Czy na pewno chcesz usunąć te profile? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Ups! Nie udało się usunąć profili. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgia - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bułgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Podgląd inwestycji @@ -6612,124 +6632,12 @@ 474 - - Canada - Kanada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Czechy - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Francja - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Niemcy - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Indie - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Włochy - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Holandia - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nowa Zelandia - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polska - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Rumunia - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Południowa Afryka - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tajlandia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Stany Zjednoczone - - libs/ui/src/lib/i18n.ts - 103 - - Error Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Ups! Nie udało się zaktualizować dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Zamknij apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Tak libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year aby skorzystać z naszego linku polecającego i otrzymać roczną subskrypcję Ghostfolio Premium @@ -7157,15 +7073,7 @@ Uzyskaj dostęp do ponad 80 000 pasków notowań giełdowych z ponad 50 giełd libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraina - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Ja apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Tryb apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Brytyjskie Wyspy Dziewicze - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Zasady i Warunki użytkownia @@ -7691,11 +7575,11 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Wielka Brytania - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Warunki świadczenia usług @@ -7768,7 +7644,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ ktoś apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Wyloguj się apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Bieżący miesiąc apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Czy na pewno chcesz wygenerować nowy token bezpieczeństwa? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Inwestycja alternatywna libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Kolekcjonerskie libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 2588a73ab..65494b458 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -118,7 +118,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -158,11 +158,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -190,7 +190,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -270,7 +270,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -350,7 +350,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -382,7 +382,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -458,7 +458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -542,7 +542,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -562,7 +562,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -710,7 +710,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -726,7 +726,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -762,11 +762,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -782,15 +782,15 @@ Portefólio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -806,11 +806,11 @@ Referência apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -826,7 +826,7 @@ Sobre o Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -838,11 +838,11 @@ Iniciar sessão apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -862,11 +862,11 @@ Oops! Token de Segurança Incorreto. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -886,7 +886,7 @@ Medo apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -894,7 +894,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -902,7 +902,7 @@ Ganância apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -910,7 +910,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1045,6 +1045,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Manter sessão iniciada @@ -1174,7 +1182,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1194,7 +1202,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -1202,7 +1210,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1214,15 +1222,15 @@ Setores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -1234,15 +1242,15 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1266,7 +1274,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1278,7 +1286,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1294,7 +1302,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1314,7 +1322,7 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1326,7 +1334,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1338,7 +1346,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1358,7 +1366,7 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1370,7 +1378,7 @@ Esta funcionalidade está atualmente indisponível. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -1378,15 +1386,15 @@ Por favor tente novamente mais tarde. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -1394,11 +1402,11 @@ Oops! Ocorreu um erro. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -1410,11 +1418,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1426,11 +1434,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1462,7 +1470,7 @@ O meu Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1497,6 +1505,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Código de cupão foi resgatado @@ -1557,6 +1573,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista do Apresentador @@ -1598,7 +1622,7 @@ Localidade apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1718,15 +1742,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1774,11 +1798,11 @@ Controlo Administrativo apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1942,7 +1966,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1970,7 +1994,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1998,7 +2022,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2006,7 +2030,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -2074,7 +2098,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2106,7 +2130,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2130,7 +2154,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -2153,6 +2177,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Unit Price Preço por Unidade @@ -2170,7 +2202,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2186,7 +2218,7 @@ A importar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2194,7 +2226,7 @@ A importação foi concluída apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2326,7 +2358,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2390,7 +2422,7 @@ Mensalmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2406,7 +2438,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2414,7 +2446,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2422,7 +2454,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -2478,15 +2510,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2538,7 +2570,7 @@ Começar apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2626,11 +2658,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2678,7 +2710,7 @@ Importar Atividades apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2742,7 +2774,7 @@ Diferença desde o Máximo Histórico libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2758,7 +2790,7 @@ a partir do ATH (All Time High) libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2794,7 +2826,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2818,7 +2850,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2838,7 +2870,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2850,11 +2882,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2870,7 +2902,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -2878,11 +2910,15 @@ Outro libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -2906,11 +2942,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2918,11 +2954,11 @@ Marcador libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2934,7 +2970,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2942,7 +2978,7 @@ Matéria-prima libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2954,7 +2990,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2962,7 +2998,7 @@ Rendimento Fixo libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2970,7 +3006,11 @@ Imobiliário libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2986,7 +3026,7 @@ Obrigação libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2994,7 +3034,7 @@ Criptomoedas libs/ui/src/lib/i18n.ts - 56 + 58 @@ -3002,7 +3042,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -3010,7 +3050,7 @@ Fundo de Investimento libs/ui/src/lib/i18n.ts - 59 + 61 @@ -3018,7 +3058,7 @@ Metal Precioso libs/ui/src/lib/i18n.ts - 60 + 62 @@ -3026,7 +3066,7 @@ Private Equity libs/ui/src/lib/i18n.ts - 61 + 63 @@ -3034,7 +3074,7 @@ Ação libs/ui/src/lib/i18n.ts - 62 + 64 @@ -3042,7 +3082,7 @@ África libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3050,7 +3090,15 @@ Ásia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3058,7 +3106,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3066,7 +3114,7 @@ América do Norte libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3082,7 +3130,7 @@ Oceânia libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3090,7 +3138,7 @@ América do Sul libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3114,15 +3162,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3150,7 +3198,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3166,7 +3214,7 @@ Dados de Mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3190,7 +3238,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3242,11 +3290,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3254,7 +3302,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3270,7 +3318,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3282,7 +3330,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3310,7 +3358,7 @@ Anualmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3318,7 +3366,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3394,7 @@ Núcleo libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3354,7 +3402,7 @@ Conceder libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3362,7 +3410,7 @@ Risco mais Elevado libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3370,7 +3418,7 @@ Risco menos Elevado libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3378,7 +3426,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3386,7 +3434,7 @@ Provisão de Reforma libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3402,7 +3450,7 @@ Satélite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3526,7 +3574,7 @@ Atualizar Plano apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3654,11 +3702,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3726,7 +3774,7 @@ Mude para o Ghostfolio Premium facilmente libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3750,7 +3798,7 @@ Mude para o Ghostfolio Premium ou Ghostfolio Open Source facilmente libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3758,7 +3806,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3802,7 +3850,7 @@ Renovar Plano apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3882,7 +3930,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3898,11 +3946,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3918,7 +3966,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3926,7 +3974,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3998,7 +4046,7 @@ Essa atividade já existe. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4062,7 +4110,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4070,7 +4118,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4078,7 +4126,7 @@ Meses libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4086,7 +4134,7 @@ Anos libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4094,7 +4142,7 @@ Mês libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4102,7 +4150,7 @@ Ano libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4262,7 +4310,15 @@ Responsabilidade libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4278,7 +4334,7 @@ Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4506,7 +4562,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4514,7 +4570,7 @@ De valor libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4522,7 +4578,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4530,7 +4586,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4546,7 +4602,7 @@ Predefinição libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4562,15 +4618,7 @@ Ásia-Pacífico libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japão - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4766,7 +4814,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4818,11 +4866,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4913,6 +4961,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Use o Ghostfolio anonimamente e possua seus dados financeiros. @@ -5378,10 +5434,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5392,7 +5444,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5492,7 +5544,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Você realmente deseja excluir esta tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Você realmente deseja excluir este perfil de ativo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Adicionar manualmente @@ -5664,7 +5724,7 @@ Última alta de todos os tempos libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Ops, a transferência do saldo em dinheiro falhou. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Medo Extremo libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Ganância Extrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Neutro libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Você realmente deseja excluir esta mensagem do sistema? @@ -5756,7 +5824,7 @@ Tendência de 50 dias libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ Tendência de 200 dias libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Saldos de caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Teste apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Ops! Não foi possível conceder acesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Dados de mercado estão atrasados para apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Coleta de dados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Ops! Parece que você está fazendo muitas solicitações. Por favor, diminua um pouco a velocidade. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonésia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Atividade @@ -6221,7 +6273,7 @@ Esta ação não é permitida. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Liquidez libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Compre e venda libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Você realmente deseja excluir esses perfis? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Ops! Não foi possível excluir perfis. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Austrália - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Áustria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Bélgica - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgária - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canadá - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - República Tcheca - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlândia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - França - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Alemanha - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Índia - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Itália - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Holanda - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nova Zelândia - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polônia - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romênia - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - África do Sul - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tailândia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Estados Unidos - - libs/ui/src/lib/i18n.ts - 103 - - Error Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Fechar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Sim libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7157,15 +7073,7 @@ Tenha acesso a mais de 80’000 tickers de mais de 50 bolsas libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ucrânia - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Termos e Condições @@ -7691,11 +7575,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Termos de Serviço @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Investimento Alternativo libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Colecionável libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index faae6b7e3..5935a0e0e 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -315,7 +315,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -355,11 +355,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -387,7 +387,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -451,7 +451,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -531,7 +531,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -563,7 +563,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -639,7 +639,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -723,7 +723,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -735,7 +735,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -743,7 +743,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -751,7 +751,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -771,7 +771,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -847,7 +847,7 @@ Ülke apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -855,7 +855,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -867,15 +867,15 @@ Sektörler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -887,15 +887,15 @@ Ülkeler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -903,7 +903,15 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -919,7 +927,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -927,7 +935,7 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -966,6 +974,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? Bu kuponu gerçekten silmek istiyor musunuz? @@ -1103,11 +1119,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1123,7 +1139,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1131,7 +1147,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1163,7 +1179,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1187,7 +1203,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1203,7 +1219,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1255,11 +1271,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1283,15 +1299,15 @@ Portföy apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1307,11 +1323,11 @@ Karşılaştırma Ölçütü apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1327,7 +1343,7 @@ Ghostfolio Hakkında apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1339,11 +1355,11 @@ Giriş apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1363,11 +1379,11 @@ Hay Allah! Güvenlik anahtarı yanlış. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1387,7 +1403,7 @@ Korku apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1395,7 +1411,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1403,7 +1419,7 @@ Açgözlülük apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1411,7 +1427,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1511,7 +1527,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1630,6 +1646,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Oturumu açık tut @@ -1779,7 +1803,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1799,7 +1823,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1947,7 +1971,7 @@ Üyeliğinizi Yükseltin apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1987,7 +2011,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1999,7 +2023,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2011,7 +2035,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2031,7 +2055,7 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2043,7 +2067,7 @@ Bu özellik şu an için mevcut değil. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2051,15 +2075,15 @@ Daha sonra tekrar deneyiniz. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2067,11 +2091,11 @@ Hay Allah! Bir şeyler yanlış gitti. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2083,11 +2107,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2099,11 +2123,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2207,15 +2231,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2263,11 +2287,11 @@ Yönetici Denetimleri apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2279,7 +2303,7 @@ Piyasa Verileri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2331,7 +2355,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2471,11 +2495,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2531,7 +2555,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -2663,7 +2687,7 @@ Başla apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2735,7 +2759,7 @@ Piyasalar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2743,7 +2767,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -2882,6 +2906,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Ghostfolio’yu anonim olarak kullanın ve finansal verilerinize sahip çıkın. @@ -3175,7 +3207,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3263,7 +3295,7 @@ İşlemleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3279,7 +3311,7 @@ Temettüleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3295,7 +3327,7 @@ Veri içe aktarılıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3303,7 +3335,7 @@ İçe aktarma tamamlandı apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3319,7 +3351,7 @@ Veri doğrulanıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3511,7 +3543,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -3627,11 +3659,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3655,7 +3687,7 @@ Aylık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -3663,7 +3695,7 @@ Yıllık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3679,7 +3711,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -3687,7 +3719,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -3695,7 +3727,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -3703,7 +3735,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -3711,7 +3743,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -3719,7 +3751,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3747,15 +3779,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -3919,7 +3951,7 @@ Aboneliği Yenile apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3943,11 +3975,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4306,10 +4338,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4320,7 +4348,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4332,11 +4360,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4368,7 +4396,7 @@ Benim Ghostfolio’m apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -4403,6 +4431,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Kupon kodu kullanıldı @@ -4475,6 +4511,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Sunum Görünümü @@ -4512,7 +4556,7 @@ Yerel Ayarlar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4716,7 +4760,7 @@ Tüm Zamanların En Yüksek Seviyesinden (ATH) Değişim libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -4732,7 +4776,7 @@ Tüm Zamanların En Yüksek Seviyesinden libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -4740,7 +4784,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -4800,7 +4844,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -4820,7 +4864,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4836,7 +4880,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -4852,7 +4896,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -4864,7 +4908,7 @@ Asya Pasifik libs/ui/src/lib/i18n.ts - 5 + 7 @@ -4880,7 +4924,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4892,11 +4936,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -4912,7 +4956,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4924,7 +4968,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -4932,7 +4976,7 @@ Temel libs/ui/src/lib/i18n.ts - 10 + 12 @@ -4940,7 +4984,7 @@ Ghostfolio Premium veya Ghostfolio Open Source’a kolayca geçin libs/ui/src/lib/i18n.ts - 12 + 14 @@ -4948,7 +4992,7 @@ Ghostfolio Premium’a kolayca geçin libs/ui/src/lib/i18n.ts - 13 + 15 @@ -4964,7 +5008,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -4972,7 +5016,7 @@ Hibe libs/ui/src/lib/i18n.ts - 18 + 20 @@ -4980,7 +5024,7 @@ Daha Yüksek Risk libs/ui/src/lib/i18n.ts - 19 + 21 @@ -4988,15 +5032,7 @@ Bu işlem zaten mevcut. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - Japonya - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5004,7 +5040,7 @@ Daha Düşük Risk libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5012,7 +5048,7 @@ Ay libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5020,7 +5056,7 @@ Ay libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5028,11 +5064,15 @@ Diğer libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5040,7 +5080,7 @@ Önceden Ayarlanmış libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5048,7 +5088,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5056,7 +5096,7 @@ Yaşlılık Provizyonu libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5072,7 +5112,7 @@ Uydu libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5096,11 +5136,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5108,11 +5148,11 @@ Etiket libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5120,7 +5160,7 @@ Yıl libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5140,7 +5180,7 @@ Yıl libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5160,7 +5200,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5168,7 +5208,7 @@ Kıymet libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5176,7 +5216,7 @@ Yükümlülük libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5188,7 +5228,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5200,7 +5240,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5208,7 +5248,7 @@ Emtia libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5220,7 +5260,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5228,7 +5268,7 @@ Sabit Gelir libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5236,7 +5276,11 @@ Gayrimenkul libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5252,7 +5296,7 @@ Bono libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5260,7 +5304,7 @@ Kriptopara libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5268,7 +5312,7 @@ Borsada İşlem Gören Fonlar (ETF) libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5276,7 +5320,7 @@ Borsada İşlem Görmeyen Fonlar (Mutual Fund) libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5284,7 +5328,7 @@ Kıymetli Metaller libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5292,7 +5336,7 @@ Özel Menkul Kıymetler libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5300,7 +5344,7 @@ Hisse Senetleri libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5308,7 +5352,7 @@ Afrika libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5316,7 +5360,15 @@ Asya libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5324,7 +5376,7 @@ Avrupa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5332,7 +5384,7 @@ Kuzey Amerika libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5348,7 +5400,7 @@ Okyanusya libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5356,7 +5408,7 @@ Güney Amerika libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5380,15 +5432,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5500,7 +5552,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Bu etiketi silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Bu varlık profilini silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Elle Giriş @@ -5664,7 +5724,7 @@ Son, ATH libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Hay Allah, Nakit bakiyesi tranferi başarısız oldu. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Aşırı Korku libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Aşırı Açgözlülük libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Nötr libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Bu sistem mesajını silmeyi gerçekten istiyor musunuz? @@ -5756,7 +5824,7 @@ 50 Günlük Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ 200 Günlük Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Nakit Bakiyeleri apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Hay Allah! Erişim izni verilemedi. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Piyasa verileri gecikmeli apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Veri Toplama apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Oops! Görünüşe göre çok fazla istekte bulunuyorsunuz. Lütfen biraz yavaşlayın. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Etkinlik @@ -6221,7 +6273,7 @@ Bu işlem izin verilmiyor. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Likidite libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Satın ve satın libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Bu profilleri silmek istediğinize emin misiniz? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Oops! Profilleri silmek mümkün olmadı. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Avustralya - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Avusturya - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belçika - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaristan - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Kanada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Çek Cumhuriyeti - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandiya - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Fransa - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Almanya - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Hindistan - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - İtalya - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Hollanda - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Yeni Zelanda - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polonya - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romanya - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Güney Afrika - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tayland - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Amerika Birleşik Devletleri - - libs/ui/src/lib/i18n.ts - 103 - - Error Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Kapat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Evet libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7157,15 +7073,7 @@ 80’000+ sembolden 50’den fazla borsada erişim alın libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Ben apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mod apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Seçici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Ermenistan - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Britanya Virjin Adaları - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Hükümler ve Koşullar @@ -7691,11 +7575,11 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Birleşik Krallık - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Hükümler ve Koşullar @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ birisi apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Oturumu kapat apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Collectible libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 94dc7e52a..551a3e9dc 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -10,7 +10,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -34,11 +34,11 @@ Увійти apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -419,7 +419,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -443,7 +443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -483,11 +483,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -515,7 +515,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -579,7 +579,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -659,7 +659,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -711,7 +711,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -743,7 +743,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -843,7 +843,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -851,7 +851,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -863,7 +863,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -871,7 +871,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -879,7 +879,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -915,7 +915,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -979,7 +979,7 @@ Ви дійсно хочете видалити цей профіль активу? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -987,7 +987,7 @@ Упс! Не вдалося видалити профілі. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -995,7 +995,7 @@ Ви дійсно хочете видалити ці профілі? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -1003,7 +1003,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -1011,7 +1011,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -1039,7 +1039,7 @@ Країна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -1047,7 +1047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1059,15 +1059,15 @@ Сектори apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -1079,15 +1079,15 @@ Країни apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1095,7 +1095,15 @@ Зіставлення символів apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -1111,7 +1119,7 @@ Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1119,7 +1127,7 @@ Тест apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -1127,11 +1135,11 @@ URL apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1147,7 +1155,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1155,7 +1163,7 @@ Примітка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1182,6 +1190,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Додати вручну @@ -1218,6 +1234,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Oops! Invalid currency. Упс! Невірна валюта. @@ -1295,7 +1319,7 @@ Збір даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1375,7 +1399,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1407,7 +1431,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1575,7 +1599,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1591,7 +1615,7 @@ Ви дійсно хочете видалити цей тег? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1615,7 +1639,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1671,11 +1695,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1699,15 +1723,15 @@ Портфель apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1723,11 +1747,11 @@ Порівняльний показник apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1743,7 +1767,7 @@ Оновити план apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1771,7 +1795,7 @@ Поновити план apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -1787,7 +1811,7 @@ Про Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1799,11 +1823,11 @@ Упс! Неправильний Секретний Токен. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1867,7 +1891,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1890,14 +1914,6 @@ 92 - - Indonesia - Індонезія - - libs/ui/src/lib/i18n.ts - 90 - - Activity Активність @@ -1911,7 +1927,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1959,7 +1975,7 @@ Страх apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1967,7 +1983,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1975,7 +1991,7 @@ Жадібність apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1983,7 +1999,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2083,7 +2099,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2158,6 +2174,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Залишатися в системі @@ -2179,7 +2203,7 @@ Ринкові дані затримуються для apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -2295,7 +2319,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2407,7 +2431,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -2575,7 +2599,7 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2587,7 +2611,7 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2599,7 +2623,7 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2619,7 +2643,7 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2631,15 +2655,7 @@ Упс! Не вдалося надати доступ. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Аргентина - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -2687,11 +2703,11 @@ Я apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -2735,11 +2751,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2774,6 +2790,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Код купона був обміняний @@ -2875,7 +2899,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -2886,6 +2910,14 @@ 328 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Режим доповідача @@ -2931,7 +2963,7 @@ Локалізація apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3059,7 +3091,7 @@ Ця функція наразі недоступна. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -3067,15 +3099,15 @@ Спробуйте ще раз пізніше. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -3083,7 +3115,7 @@ Ця дія заборонена. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -3091,11 +3123,11 @@ Упс! Щось пішло не так. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -3103,7 +3135,7 @@ Упс! Здається, ви робите занадто багато запитів. Будь ласка, пригальмуй трохи. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -3115,11 +3147,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -3223,15 +3255,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3255,7 +3287,7 @@ Упс, перенесення балансу готівки не вдалося. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -3311,11 +3343,11 @@ Управління адміністратором apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -3335,7 +3367,7 @@ Ринкові дані apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3387,7 +3419,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3535,11 +3567,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -3740,7 +3772,7 @@ Почати apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3812,7 +3844,7 @@ Ринки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3820,7 +3852,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3991,6 +4023,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Використовуйте Ghostfolio анонімно та володійте своїми фінансовими даними. @@ -4344,7 +4384,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4476,7 +4516,7 @@ Імпортувати активності apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4492,7 +4532,7 @@ Імпорт дивідендів apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4508,7 +4548,7 @@ Імпортуються дані... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -4516,7 +4556,7 @@ Імпорт завершено apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -4532,7 +4572,7 @@ Перевірка даних... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4732,7 +4772,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4864,11 +4904,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4884,11 +4924,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4908,7 +4948,7 @@ Щомісячно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4916,7 +4956,7 @@ Щорічно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4924,7 +4964,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -4972,7 +5012,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4980,7 +5020,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4988,7 +5028,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4996,7 +5036,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -5004,7 +5044,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -5012,7 +5052,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -5080,15 +5120,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -5260,11 +5300,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -5497,10 +5537,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5511,7 +5547,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5898,6 +5934,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -6055,11 +6099,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -6107,7 +6151,7 @@ Мій Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -6231,7 +6275,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6251,7 +6295,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6271,7 +6315,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6291,7 +6335,7 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6339,7 +6383,7 @@ Тренд на 50 днів libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -6347,7 +6391,7 @@ Тренд на 200 днів libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -6363,7 +6407,7 @@ Останній рекордний максимум libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -6371,7 +6415,7 @@ Зміна від Історичного Максимуму libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -6387,7 +6431,7 @@ від ІМ libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -6395,7 +6439,7 @@ Позика libs/ui/src/lib/i18n.ts - 58 + 60 @@ -6471,7 +6515,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -6498,6 +6542,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Allocation Розподіл @@ -6507,7 +6559,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6523,7 +6575,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -6539,7 +6591,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -6551,7 +6603,7 @@ Азія-Тихоокеанський регіон libs/ui/src/lib/i18n.ts - 5 + 7 @@ -6567,7 +6619,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6579,11 +6631,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -6599,7 +6651,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6611,7 +6663,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -6619,7 +6671,7 @@ Купівля та продаж libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6631,7 +6683,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6675,7 +6727,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6683,7 +6735,7 @@ Ядро libs/ui/src/lib/i18n.ts - 10 + 12 @@ -6691,7 +6743,7 @@ Закрити apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6731,7 +6783,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6739,7 +6791,7 @@ Переключитися на Ghostfolio Premium або Ghostfolio з відкритим вихідним кодом легко libs/ui/src/lib/i18n.ts - 12 + 14 @@ -6747,7 +6799,7 @@ Переключитися на Ghostfolio Premium легко libs/ui/src/lib/i18n.ts - 13 + 15 @@ -6763,7 +6815,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -6771,7 +6823,7 @@ Грант libs/ui/src/lib/i18n.ts - 18 + 20 @@ -6779,7 +6831,7 @@ Вищий ризик libs/ui/src/lib/i18n.ts - 19 + 21 @@ -6787,7 +6839,7 @@ Така активність вже існує. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -6795,7 +6847,7 @@ Нижчий ризик libs/ui/src/lib/i18n.ts - 21 + 23 @@ -6803,7 +6855,7 @@ Місяць libs/ui/src/lib/i18n.ts - 22 + 24 @@ -6811,7 +6863,7 @@ Місяців libs/ui/src/lib/i18n.ts - 23 + 25 @@ -6819,11 +6871,15 @@ Інші libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -6831,7 +6887,7 @@ Отримайте доступ до 80 000+ тікерів з понад 50 бірж libs/ui/src/lib/i18n.ts - 25 + 27 @@ -6839,7 +6895,7 @@ Пресет libs/ui/src/lib/i18n.ts - 26 + 28 @@ -6847,7 +6903,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -6855,7 +6911,7 @@ Пенсійне накопичення libs/ui/src/lib/i18n.ts - 27 + 29 @@ -6871,7 +6927,7 @@ Супутник libs/ui/src/lib/i18n.ts - 28 + 30 @@ -6895,11 +6951,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -6907,11 +6963,11 @@ Тег libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -6919,7 +6975,7 @@ Рік libs/ui/src/lib/i18n.ts - 31 + 33 @@ -6939,7 +6995,7 @@ Роки libs/ui/src/lib/i18n.ts - 32 + 34 @@ -6955,7 +7011,7 @@ Так libs/ui/src/lib/i18n.ts - 33 + 35 @@ -6975,7 +7031,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -6991,7 +7047,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -6999,7 +7055,7 @@ Цінний libs/ui/src/lib/i18n.ts - 42 + 44 @@ -7007,7 +7063,7 @@ Зобов’язання libs/ui/src/lib/i18n.ts - 40 + 42 @@ -7019,7 +7075,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -7031,7 +7087,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -7039,7 +7095,7 @@ Товар libs/ui/src/lib/i18n.ts - 46 + 48 @@ -7051,7 +7107,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -7059,7 +7115,7 @@ Фіксований дохід libs/ui/src/lib/i18n.ts - 48 + 50 @@ -7067,7 +7123,7 @@ Ліквідність libs/ui/src/lib/i18n.ts - 49 + 51 @@ -7075,7 +7131,11 @@ Нерухомість libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -7091,7 +7151,7 @@ Облігація libs/ui/src/lib/i18n.ts - 53 + 55 @@ -7099,7 +7159,7 @@ Криптовалюта libs/ui/src/lib/i18n.ts - 56 + 58 @@ -7107,7 +7167,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -7115,7 +7175,7 @@ Взаємний фонд libs/ui/src/lib/i18n.ts - 59 + 61 @@ -7123,7 +7183,7 @@ Дорогоцінний метал libs/ui/src/lib/i18n.ts - 60 + 62 @@ -7131,7 +7191,7 @@ Приватний капітал libs/ui/src/lib/i18n.ts - 61 + 63 @@ -7139,7 +7199,7 @@ Акція libs/ui/src/lib/i18n.ts - 62 + 64 @@ -7147,7 +7207,7 @@ Африка libs/ui/src/lib/i18n.ts - 69 + 71 @@ -7155,7 +7215,15 @@ Азія libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -7163,7 +7231,7 @@ Європа libs/ui/src/lib/i18n.ts - 71 + 73 @@ -7171,7 +7239,7 @@ Північна Америка libs/ui/src/lib/i18n.ts - 72 + 74 @@ -7187,7 +7255,7 @@ Океанія libs/ui/src/lib/i18n.ts - 73 + 75 @@ -7195,39 +7263,7 @@ Південна Америка libs/ui/src/lib/i18n.ts - 74 - - - - Australia - Австралія - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Австрія - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Бельгія - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Болгарія - - libs/ui/src/lib/i18n.ts - 83 + 76 @@ -7238,140 +7274,12 @@ 474 - - Canada - Канада - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Чеська Республіка - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Фінляндія - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Франція - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Німеччина - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Індія - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Італія - - libs/ui/src/lib/i18n.ts - 91 - - - - Japan - Японія - - libs/ui/src/lib/i18n.ts - 92 - - - - Netherlands - Нідерланди - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Нова Зеландія - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Польща - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Румунія - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Південна Африка - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Таїланд - - libs/ui/src/lib/i18n.ts - 100 - - - - Ukraine - Україна - - libs/ui/src/lib/i18n.ts - 101 - - - - United States - Сполучені Штати - - libs/ui/src/lib/i18n.ts - 103 - - Extreme Fear Екстремальний страх libs/ui/src/lib/i18n.ts - 106 + 79 @@ -7379,7 +7287,7 @@ Екстремальна жадібність libs/ui/src/lib/i18n.ts - 107 + 80 @@ -7387,7 +7295,7 @@ Нейтрально libs/ui/src/lib/i18n.ts - 110 + 83 @@ -7427,15 +7335,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7471,7 +7379,7 @@ Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Лінивий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Миттєвий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Режим apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Селектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ реальний час apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Змінити libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Вірменія - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Сінгапур - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Terms and Conditions @@ -7691,11 +7575,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Terms of Service @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ когось apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Колекційний предмет libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 4c38d4f7d..c929a6765 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -316,7 +316,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -338,7 +338,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -378,11 +378,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -408,7 +408,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -471,7 +471,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -549,7 +549,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -574,7 +574,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -597,7 +597,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -719,7 +719,7 @@ Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -730,28 +730,28 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 Do you really want to delete this asset profile? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -770,7 +770,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -837,6 +837,13 @@ 284 + + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh @@ -881,7 +888,7 @@ Country apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -889,7 +896,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -900,15 +907,15 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -919,22 +926,29 @@ Countries apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -948,14 +962,14 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -980,6 +994,13 @@ 16 + + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually @@ -1006,6 +1027,13 @@ 119 + + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? @@ -1126,11 +1154,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1145,14 +1173,14 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1180,7 +1208,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1223,7 +1251,7 @@ Do you really want to delete this tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1244,7 +1272,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1259,7 +1287,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1305,11 +1333,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1330,15 +1358,15 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1353,11 +1381,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1371,7 +1399,7 @@ About Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1382,11 +1410,11 @@ Sign in apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1405,11 +1433,11 @@ Oops! Incorrect Security Token. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1427,7 +1455,7 @@ Fear apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1435,14 +1463,14 @@ libs/ui/src/lib/i18n.ts - 108 + 81 Greed apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1450,7 +1478,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1538,7 +1566,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1650,6 +1678,13 @@ 46 + + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in @@ -1794,14 +1829,14 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1938,7 +1973,7 @@ Upgrade Plan apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1976,7 +2011,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1987,7 +2022,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1998,7 +2033,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2016,7 +2051,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2058,6 +2093,13 @@ 174 + + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed @@ -2123,6 +2165,13 @@ 279 + + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View @@ -2155,7 +2204,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2269,33 +2318,33 @@ This feature is currently unavailable. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 Please try again later. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 Oops! Something went wrong. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2306,11 +2355,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2321,11 +2370,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2421,15 +2470,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2452,7 +2501,7 @@ Oops, cash balance transfer has failed. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2501,11 +2550,11 @@ Admin Control apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2516,7 +2565,7 @@ Market Data apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2565,7 +2614,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2703,11 +2752,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2758,7 +2807,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -2864,7 +2913,7 @@ Get Started apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2933,7 +2982,7 @@ Markets apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2941,7 +2990,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3089,6 +3138,13 @@ 149 + + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. @@ -3402,7 +3458,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3503,7 +3559,7 @@ Import Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3518,7 +3574,7 @@ Import Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3533,14 +3589,14 @@ Importing data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 Import has been completed apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3554,7 +3610,7 @@ Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3718,7 +3774,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -3824,11 +3880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3849,14 +3905,14 @@ Monthly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 Yearly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3870,42 +3926,42 @@ Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3930,15 +3986,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4086,7 +4142,7 @@ Renew Plan apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4108,11 +4164,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4447,10 +4503,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4460,7 +4512,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4471,11 +4523,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4519,7 +4571,7 @@ My Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -4619,14 +4671,14 @@ 50-Day Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 200-Day Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -4640,14 +4692,14 @@ Last All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 Change from All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -4661,14 +4713,14 @@ from ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -4722,7 +4774,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -4740,7 +4792,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4755,7 +4807,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -4770,7 +4822,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -4781,7 +4833,7 @@ Asia-Pacific libs/ui/src/lib/i18n.ts - 5 + 7 @@ -4796,7 +4848,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4808,11 +4860,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -4827,7 +4879,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4839,28 +4891,28 @@ libs/ui/src/lib/i18n.ts - 7 + 9 Core libs/ui/src/lib/i18n.ts - 10 + 12 Switch to Ghostfolio Premium or Ghostfolio Open Source easily libs/ui/src/lib/i18n.ts - 12 + 14 Switch to Ghostfolio Premium easily libs/ui/src/lib/i18n.ts - 13 + 15 @@ -4875,95 +4927,92 @@ libs/ui/src/lib/i18n.ts - 15 + 17 Grant libs/ui/src/lib/i18n.ts - 18 + 20 Higher Risk libs/ui/src/lib/i18n.ts - 19 + 21 This activity already exists. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - - libs/ui/src/lib/i18n.ts - 92 + 22 Lower Risk libs/ui/src/lib/i18n.ts - 21 + 23 Month libs/ui/src/lib/i18n.ts - 22 + 24 Months libs/ui/src/lib/i18n.ts - 23 + 25 Other libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 Preset libs/ui/src/lib/i18n.ts - 26 + 28 No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 Retirement Provision libs/ui/src/lib/i18n.ts - 27 + 29 Satellite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -4986,29 +5035,29 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 Tag libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 Year libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5026,7 +5075,7 @@ Years libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5044,7 +5093,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5059,21 +5108,21 @@ libs/ui/src/lib/i18n.ts - 38 + 40 Valuable libs/ui/src/lib/i18n.ts - 42 + 44 Liability libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5084,7 +5133,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5095,14 +5144,14 @@ libs/ui/src/lib/i18n.ts - 54 + 56 Commodity libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5113,21 +5162,25 @@ libs/ui/src/lib/i18n.ts - 47 + 49 Fixed Income libs/ui/src/lib/i18n.ts - 48 + 50 Real Estate libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5141,77 +5194,84 @@ Bond libs/ui/src/lib/i18n.ts - 53 + 55 Cryptocurrency libs/ui/src/lib/i18n.ts - 56 + 58 ETF libs/ui/src/lib/i18n.ts - 57 + 59 Mutual Fund libs/ui/src/lib/i18n.ts - 59 + 61 Precious Metal libs/ui/src/lib/i18n.ts - 60 + 62 Private Equity libs/ui/src/lib/i18n.ts - 61 + 63 Stock libs/ui/src/lib/i18n.ts - 62 + 64 Africa libs/ui/src/lib/i18n.ts - 69 + 71 Asia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + + libs/ui/src/lib/i18n.ts + 87 Europe libs/ui/src/lib/i18n.ts - 71 + 73 North America libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5225,35 +5285,35 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 South America libs/ui/src/lib/i18n.ts - 74 + 76 Extreme Fear libs/ui/src/lib/i18n.ts - 106 + 79 Extreme Greed libs/ui/src/lib/i18n.ts - 107 + 80 Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5286,15 +5346,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5319,28 +5379,21 @@ The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 Oops! Could not grant access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5383,7 +5436,7 @@ Market data is delayed for apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5397,7 +5450,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5419,11 +5472,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5476,7 +5529,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5487,7 +5540,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5523,7 +5576,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5542,7 +5595,7 @@ years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -5583,7 +5636,7 @@ Data Gathering apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -5619,7 +5672,7 @@ Oops! It looks like you’re making too many requests. Please slow down a bit. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -5643,13 +5696,6 @@ 61 - - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity @@ -5675,7 +5721,7 @@ This action is not allowed. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -5689,14 +5735,14 @@ Liquidity libs/ui/src/lib/i18n.ts - 49 + 51 Buy and sell libs/ui/src/lib/i18n.ts - 8 + 10 @@ -5773,7 +5819,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -5794,7 +5840,7 @@ Do you really want to delete these profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -5808,14 +5854,14 @@ Oops! Could not delete profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -5905,41 +5951,6 @@ 86 - - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Poland - - libs/ui/src/lib/i18n.ts - 95 - - - - Italy - - libs/ui/src/lib/i18n.ts - 91 - - User Experience @@ -5982,27 +5993,6 @@ 474 - - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - New Zealand - - libs/ui/src/lib/i18n.ts - 94 - - - - Netherlands - - libs/ui/src/lib/i18n.ts - 93 - - Alternative @@ -6035,27 +6025,6 @@ 96 - - Romania - - libs/ui/src/lib/i18n.ts - 96 - - - - Germany - - libs/ui/src/lib/i18n.ts - 88 - - - - United States - - libs/ui/src/lib/i18n.ts - 103 - - Budgeting @@ -6063,13 +6032,6 @@ 85 - - Belgium - - libs/ui/src/lib/i18n.ts - 81 - - Open Source @@ -6081,34 +6043,6 @@ 91 - - Czech Republic - - libs/ui/src/lib/i18n.ts - 85 - - - - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - South Africa - - libs/ui/src/lib/i18n.ts - 98 - - - - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - Privacy @@ -6116,25 +6050,11 @@ 94 - - Finland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - - libs/ui/src/lib/i18n.ts - 87 - - Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6145,7 +6065,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6189,7 +6109,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6203,7 +6123,7 @@ Yes libs/ui/src/lib/i18n.ts - 33 + 35 @@ -6224,7 +6144,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6264,7 +6184,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6278,7 +6198,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6412,6 +6332,13 @@ 174 + + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year @@ -6506,13 +6433,6 @@ 40 - - Ukraine - - libs/ui/src/lib/i18n.ts - 101 - - Set API key @@ -6524,7 +6444,7 @@ Get access to 80’000+ tickers from over 50 exchanges libs/ui/src/lib/i18n.ts - 25 + 27 @@ -6715,7 +6635,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6776,11 +6696,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -6801,7 +6721,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -6815,63 +6735,63 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -6885,7 +6805,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6900,11 +6820,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6929,13 +6849,6 @@ 67 - - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Total amount @@ -6943,20 +6856,6 @@ 94 - - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - Copy portfolio data to clipboard for AI prompt @@ -7003,18 +6902,18 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7024,13 +6923,6 @@ 239 - - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service @@ -7072,14 +6964,14 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7114,7 +7006,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7143,14 +7035,14 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -7371,7 +7263,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -7530,7 +7422,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -7566,28 +7458,28 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 Collectible libs/ui/src/lib/i18n.ts - 55 + 57 Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 991b5f8b3..ba44dae95 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -340,7 +340,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -364,7 +364,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -404,11 +404,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -436,7 +436,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -500,7 +500,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -580,7 +580,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -632,7 +632,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -768,7 +768,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -788,7 +788,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -796,7 +796,7 @@ 您确实要删除此资产配置文件吗? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -804,7 +804,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -883,6 +883,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh 刷新 @@ -924,7 +932,7 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -932,7 +940,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -944,15 +952,15 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -964,15 +972,15 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -980,7 +988,15 @@ 代码映射 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -996,7 +1012,7 @@ 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1004,7 +1020,7 @@ 笔记 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1031,6 +1047,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually 手动添加 @@ -1059,6 +1083,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? 您确实要删除此优惠券吗? @@ -1196,11 +1228,11 @@ 网址 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1216,7 +1248,7 @@ 资产概况已保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1224,7 +1256,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1256,7 +1288,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1304,7 +1336,7 @@ 您真的要删除此标签吗? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1328,7 +1360,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1344,7 +1376,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1396,11 +1428,11 @@ 无法验证表单 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1424,15 +1456,15 @@ 投资组合 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1448,11 +1480,11 @@ 基准 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1468,7 +1500,7 @@ 关于 Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1480,11 +1512,11 @@ 登入 apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1504,11 +1536,11 @@ 哎呀!安全令牌不正确。 apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1528,7 +1560,7 @@ 恐惧 apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1536,7 +1568,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1544,7 +1576,7 @@ 贪婪 apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1552,7 +1584,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1652,7 +1684,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1771,6 +1803,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in 保持登录 @@ -1932,7 +1972,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1940,7 +1980,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -2088,7 +2128,7 @@ 升级计划 apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -2128,7 +2168,7 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2140,7 +2180,7 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2152,7 +2192,7 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2172,7 +2212,7 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2219,6 +2259,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed 优惠券代码已被兑换 @@ -2291,6 +2339,14 @@ 279 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View 演示者视图 @@ -2328,7 +2384,7 @@ 语言环境 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2456,7 +2512,7 @@ 此功能目前无法使用。 apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2464,15 +2520,15 @@ 请稍后再试。 apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2480,11 +2536,11 @@ 哎呀!出了些问题。 apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2496,11 +2552,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2512,11 +2568,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2620,15 +2676,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2652,7 +2708,7 @@ 糟糕,现金余额转账失败。 apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2708,11 +2764,11 @@ 管理 apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2724,7 +2780,7 @@ 市场数据 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2776,7 +2832,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2916,11 +2972,11 @@ 无法解析抓取器配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2976,7 +3032,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -3096,7 +3152,7 @@ 立即开始 apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3168,7 +3224,7 @@ 市场 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3176,7 +3232,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3339,6 +3395,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. 匿名使用 Ghostfolio 并拥有您的财务数据。 @@ -3692,7 +3756,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3804,7 +3868,7 @@ 导入活动记录 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3820,7 +3884,7 @@ 导入股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3836,7 +3900,7 @@ 正在导入数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3844,7 +3908,7 @@ 导入已完成 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3860,7 +3924,7 @@ 验证数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4044,7 +4108,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4160,11 +4224,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4188,7 +4252,7 @@ 每月 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4196,7 +4260,7 @@ 每年 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4212,7 +4276,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4220,7 +4284,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4228,7 +4292,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4236,7 +4300,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4244,7 +4308,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4252,7 +4316,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4280,15 +4344,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4452,7 +4516,7 @@ 更新计划 apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4476,11 +4540,11 @@ 无法保存资产概况 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4851,10 +4915,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4865,7 +4925,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4877,11 +4937,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4929,7 +4989,7 @@ 我的 Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5041,7 +5101,7 @@ 50 天趋势 libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5049,7 +5109,7 @@ 200天趋势 libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5065,7 +5125,7 @@ 上次历史最高纪录 libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5073,7 +5133,7 @@ 较历史最高纪录涨跌 libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5089,7 +5149,7 @@ 从 ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5097,7 +5157,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5157,7 +5217,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5177,7 +5237,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5193,7 +5253,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5209,7 +5269,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5221,7 +5281,7 @@ 亚太 libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5237,7 +5297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5249,11 +5309,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5269,7 +5329,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5281,7 +5341,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5289,7 +5349,7 @@ 核心 libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5297,7 +5357,7 @@ 轻松切换到 Ghostfolio Premium 或 Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5305,7 +5365,7 @@ 轻松切换到 Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5321,7 +5381,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5329,7 +5389,7 @@ 授予 libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5337,7 +5397,7 @@ 风险较高 libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5345,15 +5405,7 @@ 这项活动已经存在。 libs/ui/src/lib/i18n.ts - 20 - - - - Japan - 日本 - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5361,7 +5413,7 @@ 降低风险 libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5369,7 +5421,7 @@ libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5377,7 +5429,7 @@ 几个月 libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5385,11 +5437,15 @@ 其他 libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5397,7 +5453,7 @@ 预设 libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5405,7 +5461,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5413,7 +5469,7 @@ 退休金 libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5421,7 +5477,7 @@ 卫星 libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5445,11 +5501,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5457,11 +5513,11 @@ 标签 libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5469,7 +5525,7 @@ libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5489,7 +5545,7 @@ libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5509,7 +5565,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5525,7 +5581,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5533,7 +5589,7 @@ 贵重物品 libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5541,7 +5597,7 @@ 负债 libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5553,7 +5609,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5565,7 +5621,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5573,7 +5629,7 @@ 商品 libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5585,7 +5641,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5593,7 +5649,7 @@ 固定收益 libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5601,7 +5657,11 @@ 房地产 libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5617,7 +5677,7 @@ 债券 libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5625,7 +5685,7 @@ 加密货币 libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5633,7 +5693,7 @@ 交易所交易基金 libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5641,7 +5701,7 @@ 共同基金 libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5649,7 +5709,7 @@ 贵金属 libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5657,7 +5717,7 @@ 私募股权 libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5665,7 +5725,7 @@ 股票 libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5673,7 +5733,7 @@ 非洲 libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5681,7 +5741,15 @@ 亚洲 libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5689,7 +5757,7 @@ 欧洲 libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5697,7 +5765,7 @@ 北美 libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5713,7 +5781,7 @@ 大洋洲 libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5721,7 +5789,7 @@ 南美洲 libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5729,7 +5797,7 @@ 极度恐惧 libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5737,7 +5805,7 @@ 极度贪婪 libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5745,7 +5813,7 @@ 中性的 libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5781,15 +5849,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5817,7 +5885,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5825,7 +5893,7 @@ 测试 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5833,15 +5901,7 @@ 哎呀!无法授予访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - 阿根廷 - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5889,7 +5949,7 @@ 市场数据延迟 apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5905,7 +5965,7 @@ 关闭持仓 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5929,11 +5989,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5993,7 +6053,7 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6005,7 +6065,7 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6045,7 +6105,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6065,7 +6125,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6110,7 +6170,7 @@ 数据收集 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6150,7 +6210,7 @@ 哎呀!看来您提出了太多要求。请慢一点。 apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6177,14 +6237,6 @@ 61 - - Indonesia - 印度尼西亚 - - libs/ui/src/lib/i18n.ts - 90 - - Activity 活动 @@ -6222,7 +6274,7 @@ 不允许执行此操作。 apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6230,7 +6282,7 @@ 流动性 libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6246,7 +6298,7 @@ 买入和卖出 libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6326,7 +6378,7 @@ 包含在 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6350,7 +6402,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6366,7 +6418,7 @@ 您确定要删除这些配置文件吗? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6374,7 +6426,7 @@ 哎呀!无法删除配置文件。 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6573,38 +6625,6 @@ 100 - - Australia - 澳大利亚 - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - 奥地利 - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - 比利时 - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - 保加利亚 - - libs/ui/src/lib/i18n.ts - 83 - - View Holding 查看持仓 @@ -6613,124 +6633,12 @@ 474 - - Canada - 加拿大 - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - 捷克共和国 - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - 芬兰 - - libs/ui/src/lib/i18n.ts - 86 - - - - France - 法国 - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - 德国 - - libs/ui/src/lib/i18n.ts - 88 - - - - India - 印度 - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - 意大利 - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - 荷兰 - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - 新西兰 - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - 波兰 - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - 罗马尼亚 - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - 南非 - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - 泰国 - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - 美国 - - libs/ui/src/lib/i18n.ts - 103 - - Error 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6754,7 +6662,7 @@ 哎呀!无法更新访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6782,7 +6690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6834,7 +6742,7 @@ 关闭 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6874,7 +6782,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6890,7 +6798,7 @@ libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7041,6 +6949,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 @@ -7158,15 +7074,7 @@ 获取来自 50 多个交易所的 80,000+ 股票代码访问权限 libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - 乌克兰 - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7372,7 +7280,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7420,11 +7328,11 @@ apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7464,7 +7372,7 @@ AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7480,7 +7388,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7488,7 +7396,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7496,7 +7404,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7504,7 +7412,7 @@ 模式 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ 选择器 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7520,7 +7428,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7528,7 +7436,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7536,7 +7444,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7544,7 +7452,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7560,7 +7468,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7576,11 +7484,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7623,30 +7531,6 @@ 94 - - Armenia - 亚美尼亚 - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - 英属维尔京群岛 - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - 新加坡 - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions 条款和条件 @@ -7692,11 +7576,11 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7704,7 +7588,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7715,14 +7599,6 @@ 239 - - United Kingdom - 英国 - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service 服务条款 @@ -7769,7 +7645,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7777,7 +7653,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ 某人 apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ 登出 apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8293,7 +8169,7 @@ 您真的想要生成一个新的安全令牌吗? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ 另类投资 libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ 收藏品 libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html From 5177a1ee785ef9842b23fd31563f420723a856aa Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Jun 2026 09:12:03 +0200 Subject: [PATCH 13/42] Task/localize country names (part 2) (#6997) * Localize country names --- .../product-page.component.ts | 17 +- libs/common/src/lib/helper.ts | 2 +- libs/common/src/lib/personal-finance-tools.ts | 228 +++++++++--------- 3 files changed, 127 insertions(+), 120 deletions(-) diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts index 14f9554d5..0dd14485f 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1,3 +1,4 @@ +import { getCountryName } from '@ghostfolio/common/helper'; import { Product } from '@ghostfolio/common/interfaces'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; @@ -32,6 +33,7 @@ export class GfProductPageComponent implements OnInit { ) {} public ngOnInit() { + const locale = document.documentElement.lang; const { subscriptionOffer } = this.dataService.fetchInfo(); this.price = subscriptionOffer?.price; @@ -55,18 +57,23 @@ export class GfProductPageComponent implements OnInit { 'Türkçe' ], name: 'Ghostfolio', - origin: $localize`Switzerland`, + origin: getCountryName({ locale, code: 'CH' }), regions: [$localize`Global`], slogan: 'Open Source Wealth Management', useAnonymously: true }; - this.product2 = personalFinanceTools.find(({ key }) => { - return key === this.route.snapshot.data['key']; - }); + this.product2 = { + ...personalFinanceTools.find(({ key }) => { + return key === this.route.snapshot.data['key']; + }) + }; if (this.product2.origin) { - this.product2.origin = translate(this.product2.origin); + this.product2.origin = getCountryName({ + locale, + code: this.product2.origin + }); } if (this.product2.regions) { diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index db320c7cb..ce7fca518 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -264,7 +264,7 @@ export function getCountryName({ }: { code: string; locale?: string; -}) { +}): string { try { return new Intl.DisplayNames([locale], { type: 'region' }).of(code) ?? code; } catch { diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 23697e63b..86cb1ca48 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -16,7 +16,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'allvue-systems', name: 'Allvue Systems', - origin: 'United States', + origin: 'US', slogan: 'Investment Software Suite', url: 'https://www.allvuesystems.com' }, @@ -33,7 +33,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'altoo', name: 'Altoo Wealth Platform', - origin: 'Switzerland', + origin: 'CH', slogan: 'Simplicity for Complex Wealth', url: 'https://altoo.io' }, @@ -43,7 +43,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'altruist', name: 'Altruist', - origin: 'United States', + origin: 'US', slogan: 'The wealth platform built for independent advisors', url: 'https://altruist.com' }, @@ -53,7 +53,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'amsflow', name: 'Amsflow Portfolio', - origin: 'Singapore', + origin: 'SG', pricingPerYear: '$228', slogan: 'Portfolio Visualizer', url: 'https://amsflow.com' @@ -65,7 +65,7 @@ export const personalFinanceTools: Product[] = [ key: 'anlage.app', languages: ['English'], name: 'Anlage.App', - origin: 'Austria', + origin: 'AT', pricingPerYear: '$120', slogan: 'Analyze and track your portfolio.', url: 'https://anlage.app' @@ -76,7 +76,7 @@ export const personalFinanceTools: Product[] = [ key: 'asseta', languages: ['English'], name: 'Asseta', - origin: 'United States', + origin: 'US', slogan: 'The Intelligent Family Office Suite', url: 'https://www.asseta.ai' }, @@ -84,7 +84,7 @@ export const personalFinanceTools: Product[] = [ founded: 2016, key: 'atominvest', name: 'Atominvest', - origin: 'United Kingdom', + origin: 'GB', slogan: 'Portfolio Management', url: 'https://www.atominvest.co' }, @@ -94,7 +94,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'balance-pro', name: 'Balance Pro', - origin: 'United States', + origin: 'US', pricingPerYear: '$47.99', slogan: 'The Smarter Way to Track Your Finances', url: 'https://www.balancepro.app' @@ -104,7 +104,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'banktivity', name: 'Banktivity', - origin: 'United States', + origin: 'US', pricingPerYear: '$59.99', slogan: 'Proactive money management app for macOS & iOS', url: 'https://www.banktivity.com' @@ -124,7 +124,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'beanvest', name: 'Beanvest', - origin: 'France', + origin: 'FR', pricingPerYear: '$100', slogan: 'Stock Portfolio Tracker for Smart Investors', url: 'https://beanvest.com' @@ -135,7 +135,7 @@ export const personalFinanceTools: Product[] = [ key: 'bluebudget', languages: ['Deutsch', 'English', 'Français', 'Italiano'], name: 'BlueBudget', - origin: 'Switzerland', + origin: 'CH', slogan: 'Schweizer Budget App für einfache & smarte Budgetplanung', url: 'https://www.bluebudget.ch' }, @@ -146,7 +146,7 @@ export const personalFinanceTools: Product[] = [ key: 'boldin', name: 'Boldin', note: 'Originally named as NewRetirement', - origin: 'United States', + origin: 'US', pricingPerYear: '$144', slogan: 'Take control with retirement planning tools that begin with you', url: 'https://www.boldin.com' @@ -154,7 +154,7 @@ export const personalFinanceTools: Product[] = [ { key: 'budgetpulse', name: 'BudgetPulse', - origin: 'United States', + origin: 'US', slogan: 'Giving life to your finance!', url: 'https://www.budgetpulse.com' }, @@ -164,7 +164,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'buxfer', name: 'Buxfer', - origin: 'United States', + origin: 'US', pricingPerYear: '$48', regions: ['Global'], slogan: 'Take control of your financial future', @@ -175,7 +175,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'capitally', name: 'Capitally', - origin: 'Poland', + origin: 'PL', pricingPerYear: '€80', slogan: 'Optimize your investments performance', url: 'https://www.mycapitally.com' @@ -185,7 +185,7 @@ export const personalFinanceTools: Product[] = [ isArchived: true, key: 'capmon', name: 'CapMon.org', - origin: 'Germany', + origin: 'DE', note: 'CapMon.org was discontinued in 2023', slogan: 'Next Generation Assets Tracking' }, @@ -202,7 +202,7 @@ export const personalFinanceTools: Product[] = [ founded: 2011, key: 'cobalt', name: 'Cobalt', - origin: 'United States', + origin: 'US', slogan: 'Next-Level Portfolio Monitoring', url: 'https://www.cobalt.pe' }, @@ -212,7 +212,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'coinstats', name: 'CoinStats', - origin: 'Armenia', + origin: 'AM', pricingPerYear: '$168', slogan: 'Manage All Your Wallets & Exchanges From One Place', url: 'https://coinstats.app' @@ -224,7 +224,7 @@ export const personalFinanceTools: Product[] = [ key: 'cointracking', languages: ['Deutsch', 'English'], name: 'CoinTracking', - origin: 'Germany', + origin: 'DE', pricingPerYear: '$120', slogan: 'The leading Crypto Portfolio Tracker & Tax Calculator', url: 'https://cointracking.info' @@ -233,7 +233,7 @@ export const personalFinanceTools: Product[] = [ founded: 2019, key: 'compound-planning', name: 'Compound Planning', - origin: 'United States', + origin: 'US', slogan: 'Modern Wealth & Investment Management', url: 'https://compoundplanning.com' }, @@ -243,7 +243,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'copilot-money', name: 'Copilot Money', - origin: 'United States', + origin: 'US', pricingPerYear: '$95', slogan: 'Do money better with Copilot', url: 'https://www.copilot.money' @@ -253,7 +253,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'countabout', name: 'CountAbout', - origin: 'United States', + origin: 'US', pricingPerYear: '$9.99', slogan: 'Customizable and Secure Personal Finance App', url: 'https://countabout.com' @@ -263,7 +263,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'danti', name: 'Danti', - origin: 'United Kingdom', + origin: 'GB', slogan: 'Digitising Generational Wealth', url: 'https://danti.io' }, @@ -282,7 +282,7 @@ export const personalFinanceTools: Product[] = [ key: 'defi-portfolio-tracker-by-zerion', languages: ['English'], name: 'DeFi Portfolio Tracker by Zerion', - origin: 'United States', + origin: 'US', pricingPerYear: '$99', slogan: 'DeFi Portfolio Tracker for All Chains', url: 'https://zerion.io/defi-portfolio-tracker' @@ -294,7 +294,7 @@ export const personalFinanceTools: Product[] = [ key: 'degiro-portfolio-tracker-by-capitalyse', languages: ['English'], name: 'DEGIRO Portfolio Tracker by Capitalyse', - origin: 'Netherlands', + origin: 'NL', pricingPerYear: '€24', slogan: 'Democratizing Data Analytics', url: 'https://capitalyse.app/app/degiro' @@ -306,7 +306,7 @@ export const personalFinanceTools: Product[] = [ key: 'delta', name: 'Delta Investment Tracker', note: 'Acquired by eToro', - origin: 'Belgium', + origin: 'BE', pricingPerYear: '$150', slogan: 'The app to track all your investments. Make smart moves only.', url: 'https://delta.app' @@ -328,7 +328,7 @@ export const personalFinanceTools: Product[] = [ key: 'divvydiary', languages: ['Deutsch', 'English'], name: 'DivvyDiary', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€65', slogan: 'Your personal Dividend Calendar', url: 'https://divvydiary.com' @@ -339,7 +339,7 @@ export const personalFinanceTools: Product[] = [ key: 'empower', name: 'Empower', note: 'Originally named as Personal Capital', - origin: 'United States', + origin: 'US', slogan: 'Get answers to your money questions', url: 'https://www.empower.com' }, @@ -348,7 +348,7 @@ export const personalFinanceTools: Product[] = [ founded: 2022, key: 'eightfigures', name: '8FIGURES', - origin: 'United States', + origin: 'US', slogan: 'Portfolio Tracker Designed by Professional Investors', url: 'https://8figures.com' }, @@ -357,7 +357,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'etops', name: 'etops', - origin: 'Switzerland', + origin: 'CH', slogan: 'Your financial superpower', url: 'https://www.etops.com' }, @@ -367,7 +367,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'exirio', name: 'Exirio', - origin: 'United States', + origin: 'US', pricingPerYear: '$100', slogan: 'All your wealth, in one place.', url: 'https://www.exirio.com' @@ -378,7 +378,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'fey', name: 'Fey', - origin: 'Canada', + origin: 'CA', pricingPerYear: '$300', slogan: 'Make better investments.', url: 'https://fey.com' @@ -390,7 +390,7 @@ export const personalFinanceTools: Product[] = [ key: 'fina', languages: ['English'], name: 'Fina', - origin: 'United States', + origin: 'US', pricingPerYear: '$115', slogan: 'Flexible Financial Management', url: 'https://www.fina.money' @@ -401,7 +401,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'finanzfluss-copilot', name: 'Finanzfluss Copilot', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€69.99', slogan: 'Portfolio Tracker für dein Vermögen', url: 'https://www.finanzfluss.de/copilot' @@ -411,7 +411,7 @@ export const personalFinanceTools: Product[] = [ key: 'finary', languages: ['Deutsch', 'English', 'Français'], name: 'Finary', - origin: 'United States', + origin: 'US', slogan: 'Real-Time Portfolio Tracker & Stock Tracker', url: 'https://finary.com' }, @@ -422,7 +422,7 @@ export const personalFinanceTools: Product[] = [ key: 'finateka', languages: ['English'], name: 'FINATEKA', - origin: 'United States', + origin: 'US', slogan: 'The most convenient mobile application for personal finance accounting', url: 'https://finateka.com' @@ -431,7 +431,7 @@ export const personalFinanceTools: Product[] = [ founded: 2022, key: 'fincake', name: 'Fincake', - origin: 'British Virgin Islands', + origin: 'VG', slogan: 'Easy-to-use Portfolio Tracker', url: 'https://fincake.io' }, @@ -440,7 +440,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'finvest', name: 'Finvest', - origin: 'United States', + origin: 'US', slogan: 'Grow your wealth in a stress-free way', url: 'https://www.getfinvest.com' }, @@ -449,7 +449,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: true, key: 'finwise', name: 'FinWise', - origin: 'South Africa', + origin: 'ZA', pricingPerYear: '€69.99', slogan: 'Personal finances, simplified', url: 'https://finwiseapp.io' @@ -461,7 +461,7 @@ export const personalFinanceTools: Product[] = [ key: 'firekit', languages: ['English', 'українська мова'], name: 'FIREkit', - origin: 'Ukraine', + origin: 'UA', pricingPerYear: '$40', slogan: 'A simple solution to track your wealth online', url: 'https://firekit.space' @@ -472,7 +472,7 @@ export const personalFinanceTools: Product[] = [ key: 'folishare', languages: ['Deutsch', 'English'], name: 'folishare', - origin: 'Austria', + origin: 'AT', pricingPerYear: '$65', slogan: 'Take control over your investments', url: 'https://www.folishare.com' @@ -490,7 +490,7 @@ export const personalFinanceTools: Product[] = [ 'Português' ], name: 'Gasti', - origin: 'Argentina', + origin: 'AR', pricingPerYear: '$60', regions: ['Global'], slogan: 'Take control of your finances from WhatsApp', @@ -503,7 +503,7 @@ export const personalFinanceTools: Product[] = [ key: 'getquin', languages: ['Deutsch', 'English'], name: 'getquin', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€48', slogan: 'Portfolio Tracker, Analysis & Community', url: 'https://www.getquin.com' @@ -515,7 +515,7 @@ export const personalFinanceTools: Product[] = [ key: 'gospatz', name: 'goSPATZ', note: 'Renamed to Money Peak', - origin: 'Germany', + origin: 'DE', slogan: 'Volle Kontrolle über deine Investitionen' }, { @@ -525,7 +525,7 @@ export const personalFinanceTools: Product[] = [ key: 'gustav', languages: ['Français'], name: 'Gustav', - origin: 'France', + origin: 'FR', pricingPerYear: '€59.99', slogan: 'Prenez enfin le contrôle de votre argent', url: 'https://get-gustav.com' @@ -536,7 +536,7 @@ export const personalFinanceTools: Product[] = [ key: 'holistic-capital', languages: ['Deutsch'], name: 'Holistic', - origin: 'Germany', + origin: 'DE', slogan: 'Die All-in-One Lösung für dein Vermögen.', url: 'https://holistic.capital', useAnonymously: true @@ -546,7 +546,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'honeydue', name: 'Honeydue', - origin: 'United States', + origin: 'US', slogan: 'Finance App for Couples', url: 'https://www.honeydue.com' }, @@ -556,7 +556,7 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Income Reign', note: 'Income Reign was discontinued in 2025', - origin: 'United States', + origin: 'US', pricingPerYear: '$120' }, { @@ -566,7 +566,7 @@ export const personalFinanceTools: Product[] = [ key: 'intuit-mint', name: 'Intuit Mint', note: 'Intuit Mint was discontinued in 2023', - origin: 'United States', + origin: 'US', pricingPerYear: '$60', slogan: 'Managing money, made simple' }, @@ -575,7 +575,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'investify', name: 'Investify', - origin: 'Pakistan', + origin: 'PK', slogan: 'Advanced portfolio tracking and stock market information', url: 'https://www.investify.pk' }, @@ -586,7 +586,7 @@ export const personalFinanceTools: Product[] = [ key: 'invmon', name: 'InvMon', note: 'Originally named as A2PB', - origin: 'Switzerland', + origin: 'CH', pricingPerYear: '$156', slogan: 'Track all your assets, investments and portfolios in one place', url: 'https://invmon.com', @@ -598,7 +598,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'justetf', name: 'justETF', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€119', slogan: 'ETF portfolios made simple', url: 'https://www.justetf.com' @@ -609,7 +609,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'koinly', name: 'Koinly', - origin: 'Singapore', + origin: 'SG', slogan: 'Track all your crypto wallets in one place', url: 'https://koinly.io' }, @@ -619,7 +619,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'koyfin', name: 'Koyfin', - origin: 'United States', + origin: 'US', pricingPerYear: '$468', slogan: 'Comprehensive financial data analysis', url: 'https://www.koyfin.com' @@ -630,7 +630,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'kubera', name: 'Kubera®', - origin: 'United States', + origin: 'US', pricingPerYear: '$249', slogan: 'The Time Machine for your Net Worth', url: 'https://www.kubera.com' @@ -641,7 +641,7 @@ export const personalFinanceTools: Product[] = [ key: 'leafs', languages: ['Deutsch', 'English'], name: 'Leafs', - origin: 'Switzerland', + origin: 'CH', slogan: 'Sustainability insights for wealth managers', url: 'https://leafs.ch' }, @@ -651,7 +651,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'magnifi', name: 'Magnifi', - origin: 'United States', + origin: 'US', pricingPerYear: '$132', slogan: 'AI Investing Assistant', url: 'https://magnifi.com' @@ -663,7 +663,7 @@ export const personalFinanceTools: Product[] = [ key: 'markets.sh', languages: ['English'], name: 'markets.sh', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€168', regions: ['Global'], slogan: 'Track your investments', @@ -673,7 +673,7 @@ export const personalFinanceTools: Product[] = [ founded: 2010, key: 'masttro', name: 'Masttro', - origin: 'United States', + origin: 'US', slogan: 'Your platform for wealth in full view', url: 'https://masttro.com' }, @@ -687,7 +687,7 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Maybe Finance', note: 'Maybe Finance was discontinued in 2023, relaunched in 2024, and discontinued again in 2025', - origin: 'United States', + origin: 'US', pricingPerYear: '$145', regions: ['United States'], slogan: 'Your financial future, in your control', @@ -699,7 +699,7 @@ export const personalFinanceTools: Product[] = [ key: 'merlincrypto', languages: ['English'], name: 'Merlin', - origin: 'United States', + origin: 'US', pricingPerYear: '$204', regions: ['Canada', 'United States'], slogan: 'The smartest way to track your crypto', @@ -712,7 +712,7 @@ export const personalFinanceTools: Product[] = [ key: 'microsoft-money', name: 'Microsoft Money', note: 'Microsoft Money was discontinued in 2010', - origin: 'United States' + origin: 'US' }, { founded: 2019, @@ -720,7 +720,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'monarch-money', name: 'Monarch Money', - origin: 'United States', + origin: 'US', pricingPerYear: '$99.99', slogan: 'The modern way to manage your money', url: 'https://www.monarch.com' @@ -731,7 +731,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'moneydance', name: 'Moneydance', - origin: 'Scotland', + origin: 'GB', pricingPerYear: '$100', slogan: 'Personal Finance Manager for Mac, Windows, and Linux', url: 'https://moneydance.com' @@ -742,7 +742,7 @@ export const personalFinanceTools: Product[] = [ key: 'moneypeak', name: 'Money Peak', note: 'Originally named as goSPATZ', - origin: 'Germany', + origin: 'DE', slogan: 'Dein smarter Finance Assistant', url: 'https://moneypeak.ai' }, @@ -751,7 +751,7 @@ export const personalFinanceTools: Product[] = [ key: 'moneyspire', name: 'Moneyspire', note: 'License is a perpetual license', - origin: 'United States', + origin: 'US', pricingPerYear: '$59.99', slogan: 'Have total control of your financial life', url: 'https://www.moneyspire.com' @@ -759,7 +759,7 @@ export const personalFinanceTools: Product[] = [ { key: 'moneywiz', name: 'MoneyWiz', - origin: 'United States', + origin: 'US', pricingPerYear: '$29.99', slogan: 'Get money management superpowers', url: 'https://www.wiz.money' @@ -780,7 +780,7 @@ export const personalFinanceTools: Product[] = [ key: 'monsy', languages: ['English'], name: 'Monsy', - origin: 'Indonesia', + origin: 'ID', pricingPerYear: '$20', slogan: 'Smart, simple, stress-free money tracking.', url: 'https://www.monsy.app' @@ -791,7 +791,7 @@ export const personalFinanceTools: Product[] = [ key: 'morningstar-portfolio-manager', languages: ['English'], name: 'Morningstar® Portfolio Manager', - origin: 'United States', + origin: 'US', slogan: 'Track your equity, fund, investment trust, ETF and pension investments in one place.', url: 'https://www.morningstar.com/mm' @@ -812,7 +812,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'nansen', name: 'Crypto Portfolio Tracker by Nansen', - origin: 'Singapore', + origin: 'SG', pricingPerYear: '$1188', slogan: 'Your Complete Crypto Portfolio, Reimagined', url: 'https://www.nansen.ai/crypto-portfolio-tracker' @@ -823,7 +823,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'navexa', name: 'Navexa', - origin: 'Australia', + origin: 'AU', pricingPerYear: '$90', slogan: 'The Intelligent Portfolio Tracker', url: 'https://www.navexa.com' @@ -844,7 +844,7 @@ export const personalFinanceTools: Product[] = [ key: 'parqet', name: 'Parqet', note: 'Originally named as Tresor One', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€99.99', regions: ['Austria', 'Germany', 'Switzerland'], slogan: 'Dein Vermögen immer im Blick', @@ -854,14 +854,14 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'peek', name: 'Peek', - origin: 'Singapore', + origin: 'SG', slogan: 'Feel in control of your money without spreadsheets or shame', url: 'https://peek.money' }, { key: 'pennies', name: 'Pennies', - origin: 'United States', + origin: 'US', pricingPerYear: '$39.99', slogan: 'Your money. Made simple.', url: 'https://www.getpennies.com' @@ -872,7 +872,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'pinklion', name: 'PinkLion', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€50', slogan: 'Invest smarter, not harder', url: 'https://pinklion.xyz' @@ -884,7 +884,7 @@ export const personalFinanceTools: Product[] = [ key: 'plainzer', languages: ['English'], name: 'Plainzer', - origin: 'Poland', + origin: 'PL', pricingPerYear: '$74', slogan: 'Free dividend tracker for your portfolio', url: 'https://plainzer.com' @@ -894,7 +894,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'plannix', name: 'Plannix', - origin: 'Italy', + origin: 'IT', slogan: 'Your Personal Finance Hub', url: 'https://www.plannix.co' }, @@ -904,7 +904,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'pocketguard', name: 'PocketGuard', - origin: 'United States', + origin: 'US', pricingPerYear: '$74.99', slogan: 'Budgeting App & Finance Planner', url: 'https://pocketguard.com' @@ -916,7 +916,7 @@ export const personalFinanceTools: Product[] = [ key: 'pocketsmith', languages: ['English'], name: 'PocketSmith', - origin: 'New Zealand', + origin: 'NZ', pricingPerYear: '$120', regions: ['Global'], slogan: 'Know where your money is going', @@ -928,7 +928,7 @@ export const personalFinanceTools: Product[] = [ key: 'portfolio-dividend-tracker', languages: ['English', 'Nederlands'], name: 'Portfolio Dividend Tracker', - origin: 'Netherlands', + origin: 'NL', pricingPerYear: '€60', slogan: 'Manage all your portfolios', url: 'https://portfoliodividendtracker.com' @@ -959,7 +959,7 @@ export const personalFinanceTools: Product[] = [ key: 'portseido', languages: ['Deutsch', 'English', 'Français', 'Nederlands'], name: 'Portseido', - origin: 'Thailand', + origin: 'TH', pricingPerYear: '$96', slogan: 'Portfolio Performance and Dividend Tracker', url: 'https://www.portseido.com' @@ -970,7 +970,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'projectionlab', name: 'ProjectionLab', - origin: 'United States', + origin: 'US', pricingPerYear: '$108', slogan: 'Build Financial Plans You Love.', url: 'https://projectionlab.com' @@ -981,7 +981,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'prostocktracker', name: 'Pro Stock Tracker', - origin: 'United Kingdom', + origin: 'GB', pricingPerYear: '$60', slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' @@ -1002,7 +1002,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'rocket-money', name: 'Rocket Money', - origin: 'United States', + origin: 'US', slogan: 'Track your net worth', url: 'https://www.rocketmoney.com' }, @@ -1013,7 +1013,7 @@ export const personalFinanceTools: Product[] = [ key: 'sarmaaya.pk', name: 'Sarmaaya.pk Portfolio Tracking', note: 'Sarmaaya.pk Portfolio Tracking was discontinued in 2024', - origin: 'Pakistan', + origin: 'PK', slogan: 'Unified platform for financial research and portfolio tracking' }, { @@ -1022,7 +1022,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'seeking-alpha', name: 'Seeking Alpha', - origin: 'United States', + origin: 'US', pricingPerYear: '$239', slogan: 'Stock Market Analysis & Tools for Investors', url: 'https://seekingalpha.com' @@ -1031,7 +1031,7 @@ export const personalFinanceTools: Product[] = [ founded: 2022, key: 'segmio', name: 'Segmio', - origin: 'Romania', + origin: 'RO', slogan: 'Wealth Management and Net Worth Tracking', url: 'https://www.segmio.com' }, @@ -1041,7 +1041,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'sharesight', name: 'Sharesight', - origin: 'New Zealand', + origin: 'NZ', pricingPerYear: '$135', regions: ['Global'], slogan: 'Stock Portfolio Tracker', @@ -1060,7 +1060,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'simple-portfolio', name: 'Simple Portfolio', - origin: 'Czech Republic', + origin: 'CZ', pricingPerYear: '€80', slogan: 'Stock Portfolio Tracker', url: 'https://simpleportfolio.app' @@ -1071,7 +1071,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'simply-wallstreet', name: 'Stock Portfolio Tracker & Visualizer by Simply Wall St', - origin: 'Australia', + origin: 'AU', pricingPerYear: '$120', slogan: 'Smart portfolio tracker for informed investors', url: 'https://simplywall.st' @@ -1082,7 +1082,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'snowball-analytics', name: 'Snowball Analytics', - origin: 'France', + origin: 'FR', pricingPerYear: '$80', slogan: 'Simple and powerful portfolio tracker', url: 'https://snowball-analytics.com' @@ -1090,7 +1090,7 @@ export const personalFinanceTools: Product[] = [ { key: 'splashmoney', name: 'SplashMoney', - origin: 'United States', + origin: 'US', slogan: 'Manage your money anytime, anywhere.' }, { @@ -1098,14 +1098,14 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'stock-events', name: 'Stock Events', - origin: 'Germany', + origin: 'DE', slogan: 'Track all your Investments', url: 'https://stockevents.app' }, { key: 'stockle', name: 'Stockle', - origin: 'Finland', + origin: 'FI', slogan: 'Supercharge your investments tracking experience', url: 'https://stockle.app' }, @@ -1114,7 +1114,7 @@ export const personalFinanceTools: Product[] = [ isArchived: true, key: 'stockmarketeye', name: 'StockMarketEye', - origin: 'France', + origin: 'FR', note: 'StockMarketEye was discontinued in 2023', slogan: 'A Powerful Portfolio & Investment Tracking App' }, @@ -1124,7 +1124,7 @@ export const personalFinanceTools: Product[] = [ key: 'stock-rover', languages: ['English'], name: 'Stock Rover', - origin: 'United States', + origin: 'US', pricingPerYear: '$79.99', slogan: 'Investment Research and Portfolio Management', url: 'https://www.stockrover.com' @@ -1135,7 +1135,7 @@ export const personalFinanceTools: Product[] = [ key: 'stonksfolio', languages: ['English'], name: 'Stonksfolio', - origin: 'Bulgaria', + origin: 'BG', pricingPerYear: '€49.90', slogan: 'Visualize all of your portfolios', url: 'https://stonksfolio.com' @@ -1145,7 +1145,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'sumio', name: 'Sumio', - origin: 'Czech Republic', + origin: 'CZ', pricingPerYear: '$20', slogan: 'Sum up and build your wealth.', url: 'https://www.sumio.app' @@ -1155,7 +1155,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'tiller', name: 'Tiller', - origin: 'United States', + origin: 'US', pricingPerYear: '$79', slogan: 'Your financial life in a spreadsheet, automatically updated each day', @@ -1167,7 +1167,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'tradervue', name: 'Tradervue', - origin: 'United States', + origin: 'US', pricingPerYear: '$360', slogan: 'The Trading Journal to Improve Your Trading Performance', url: 'https://www.tradervue.com' @@ -1199,7 +1199,7 @@ export const personalFinanceTools: Product[] = [ key: 'tresor-one', name: 'Tresor One', note: 'Renamed to Parqet', - origin: 'Germany', + origin: 'DE', regions: ['Austria', 'Germany', 'Switzerland'], slogan: 'Dein Vermögen immer im Blick' }, @@ -1209,7 +1209,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'turbobulls', name: 'Turbobulls', - origin: 'Romania', + origin: 'RO', pricingPerYear: '€39.99', slogan: 'Your complete financial dashboard. Actually private.', url: 'https://www.turbobulls.com' @@ -1220,7 +1220,7 @@ export const personalFinanceTools: Product[] = [ key: 'utluna', languages: ['Deutsch', 'English', 'Français'], name: 'Utluna', - origin: 'Switzerland', + origin: 'CH', pricingPerYear: '$300', slogan: 'Your Portfolio. Revealed.', url: 'https://www.utluna.com', @@ -1231,7 +1231,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: true, key: 'vyzer', name: 'Vyzer', - origin: 'United States', + origin: 'US', pricingPerYear: '$348', slogan: 'Virtual Family Office for Smart Wealth Management', url: 'https://vyzer.co' @@ -1242,7 +1242,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'walletguide', name: 'Walletguide', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€90', slogan: 'Personal finance reimagined with AI', url: 'https://walletguide.com' @@ -1254,7 +1254,7 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'wallmine', note: 'wallmine was discontinued in 2024', - origin: 'Czech Republic', + origin: 'CZ', pricingPerYear: '$600', slogan: 'Make Smarter Investments' }, @@ -1264,7 +1264,7 @@ export const personalFinanceTools: Product[] = [ key: 'wealthbrain', languages: ['English'], name: 'Wealthbrain', - origin: 'United Arab Emirates', + origin: 'AE', slogan: 'Portfolio Management System', url: 'https://wealthbrain.com' }, @@ -1276,7 +1276,7 @@ export const personalFinanceTools: Product[] = [ key: 'wealthfolio', languages: ['English'], name: 'Wealthfolio', - origin: 'Canada', + origin: 'CA', slogan: 'Desktop Investment Tracker', url: 'https://wealthfolio.app' }, @@ -1287,7 +1287,7 @@ export const personalFinanceTools: Product[] = [ key: 'wealthica', languages: ['English', 'Français'], name: 'Wealthica', - origin: 'Canada', + origin: 'CA', pricingPerYear: '$50', slogan: 'See all your investments in one place', url: 'https://wealthica.com' @@ -1307,14 +1307,14 @@ export const personalFinanceTools: Product[] = [ key: 'wealthy-tracker', languages: ['English'], name: 'Wealthy Tracker', - origin: 'India', + origin: 'IN', slogan: 'One app to manage all your investments', url: 'https://www.wealthy.in/tracker' }, { key: 'whal', name: 'Whal', - origin: 'United States', + origin: 'US', slogan: 'Manage your investments in one place' }, { @@ -1326,7 +1326,7 @@ export const personalFinanceTools: Product[] = [ languages: ['Deutsch', 'English', 'Español', 'Français', 'Italiano'], name: 'yeekatee', note: 'yeekatee was discontinued in 2024', - origin: 'Switzerland', + origin: 'CH', regions: ['Global'], slogan: 'Connect. Share. Invest.' }, @@ -1336,7 +1336,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'ynab', name: 'YNAB (You Need a Budget)', - origin: 'United States', + origin: 'US', pricingPerYear: '$109', slogan: 'Change Your Relationship With Money', url: 'https://www.ynab.com' @@ -1347,7 +1347,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'ziggma', name: 'Ziggma', - origin: 'United States', + origin: 'US', pricingPerYear: '$84', slogan: 'Your solution for investing success', url: 'https://ziggma.com' From 03ad9bc1a0987e37c2efe3d5abf312d36bc762cf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Jun 2026 09:12:41 +0200 Subject: [PATCH 14/42] Task/improve language localization for DE (20260606) (#6996) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.de.xlf | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f17f1288..878641e5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prevented the deletion of asset profiles that are currently in use - Ensured market data is correctly removed when an asset profile with no remaining activities is deleted - Refactored the backend logging to use the instance-based `Logger` +- Improved the language localization for German (`de`) - Improved the language localization for Ukrainian (`uk`) ### Fixed diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 504dc107a..fd0ca79d6 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -887,7 +887,7 @@ Energy - Energy + Energie libs/ui/src/lib/i18n.ts 90 @@ -1223,7 +1223,7 @@ Consumer Defensive - Consumer Defensive + Defensive Konsumgüter libs/ui/src/lib/i18n.ts 89 @@ -1291,7 +1291,7 @@ Utilities - Utilities + Versorgungsbetriebe libs/ui/src/lib/i18n.ts 97 @@ -2019,7 +2019,7 @@ Consumer Cyclical - Consumer Cyclical + Zyklische Konsumgüter libs/ui/src/lib/i18n.ts 88 @@ -3123,7 +3123,7 @@ Communication Services - Communication Services + Kommunikationsdienste libs/ui/src/lib/i18n.ts 87 @@ -4339,7 +4339,7 @@ Technology - Technology + Technologie libs/ui/src/lib/i18n.ts 96 @@ -4987,7 +4987,7 @@ Basic Materials - Basic Materials + Grundstoffe libs/ui/src/lib/i18n.ts 86 @@ -5713,7 +5713,7 @@ Industrials - Industrials + Industrie libs/ui/src/lib/i18n.ts 93 @@ -5829,7 +5829,7 @@ Healthcare - Healthcare + Gesundheitswesen libs/ui/src/lib/i18n.ts 92 @@ -6974,7 +6974,7 @@ Financial Services - Financial Services + Finanzdienstleistungen libs/ui/src/lib/i18n.ts 91 From 2faa4c7c89950f33c4755598713f2fe64eea33f0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Jun 2026 10:21:14 +0200 Subject: [PATCH 15/42] Bugfix/prevent FAB from overlapping paginators on mobile (#7000) * Prevent FAB from overlapping paginators on mobile * Update changelog --- CHANGELOG.md | 1 + .../portfolio/activities/activities-page.html | 2 +- libs/ui/src/lib/fab/fab.component.scss | 32 +++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 878641e5f..c903fb38e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Prevented the floating action button from overlapping the paginator on mobile - Fixed an issue where the asset profile override (asset class and asset sub class) was not applied to the data enhancers when gathering asset profiles - Fixed a layout issue in the asset profile dialog of the admin control panel by truncating long titles diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.html b/apps/client/src/app/pages/portfolio/activities/activities-page.html index f06947988..23e0cef02 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.html +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1,5 +1,5 @@
-
+

Activities

Date: Sun, 7 Jun 2026 10:23:47 +0200 Subject: [PATCH 16/42] Release 3.8.0 (#7001) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c903fb38e..ef50d292f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 3.8.0 - 2026-06-07 ### Added diff --git a/package-lock.json b/package-lock.json index e7b5a2bca..26f8ee255 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.7.0", + "version": "3.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.7.0", + "version": "3.8.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 4fa3e522a..04f125aa7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.7.0", + "version": "3.8.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 449eaa1baa678c3be98f137cc5196986c0480fb1 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:10:47 -0600 Subject: [PATCH 17/42] Task/prefill form with current cash balance value in account details dialog (#6998) * Prefill form with current cash balance value * Update changelog --- CHANGELOG.md | 6 ++++++ .../account-detail-dialog.html | 1 + .../account-balances/account-balances.component.ts | 13 +++++++++++++ 3 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef50d292f..07002a2d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Prefilled the form in the account balance management with the current cash balance + ## 3.8.0 - 2026-06-07 ### Added diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index cd397e35e..4b652db96 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -148,6 +148,7 @@ [accountBalances]="accountBalances" [accountCurrency]="currency" [accountId]="data.accountId" + [currentBalance]="balance" [locale]="user?.settings?.locale" [showActions]=" !data.hasImpersonationId && diff --git a/libs/ui/src/lib/account-balances/account-balances.component.ts b/libs/ui/src/lib/account-balances/account-balances.component.ts index 7b26263b0..503f84071 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.ts +++ b/libs/ui/src/lib/account-balances/account-balances.component.ts @@ -13,6 +13,7 @@ import { OnChanges, OnInit, Output, + effect, inject, input, viewChild @@ -70,6 +71,7 @@ export class GfAccountBalancesComponent implements OnChanges, OnInit { input.required(); public readonly accountCurrency = input.required(); public readonly accountId = input.required(); + public readonly currentBalance = input(); public readonly displayedColumns: string[] = ['date', 'value', 'actions']; public readonly locale = input(getLocale()); public readonly showActions = input(true); @@ -89,6 +91,17 @@ export class GfAccountBalancesComponent implements OnChanges, OnInit { public constructor() { addIcons({ calendarClearOutline, ellipsisHorizontal, trashOutline }); + + effect(() => { + const currentBalance = this.currentBalance(); + + if ( + this.accountBalanceForm.controls.balance.pristine && + typeof currentBalance === 'number' + ) { + this.accountBalanceForm.controls.balance.setValue(currentBalance); + } + }); } public ngOnInit() { From 566c1a0b8e0ad4a5133b207c22fab78e2a7ebd90 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:14:12 +0200 Subject: [PATCH 18/42] Task/disable selection of future dates in account balance management (#7003) * Disable selection of future dates * Update changelog --- CHANGELOG.md | 1 + .../lib/account-balances/account-balances.component.html | 7 ++++++- .../src/lib/account-balances/account-balances.component.ts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07002a2d1..c0d5dba4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Prefilled the form in the account balance management with the current cash balance +- Disabled the selection of future dates in the account balance management ## 3.8.0 - 2026-06-07 diff --git a/libs/ui/src/lib/account-balances/account-balances.component.html b/libs/ui/src/lib/account-balances/account-balances.component.html index 29037a985..ee1450435 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.html +++ b/libs/ui/src/lib/account-balances/account-balances.component.html @@ -16,7 +16,12 @@ - + (); + public maxDate = new Date(); private dateAdapter = inject>(DateAdapter); private notificationService = inject(NotificationService); From 034877a7756dc914bb43f0edf2a5608449f17366 Mon Sep 17 00:00:00 2001 From: battdir Date: Thu, 11 Jun 2026 02:54:22 +0900 Subject: [PATCH 19/42] Task/improve language localization for KO (#7009) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ko.xlf | 250 ++++++++++++------------ 2 files changed, 126 insertions(+), 125 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0d5dba4a..240ca983f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Improved the language localization for Korean (`ko`) ## 3.8.0 - 2026-06-07 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 07a6daa1d..e9f4139dc 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -585,7 +585,7 @@ Do you really want to delete this account? - 이 계정을 정말 삭제하시겠습니까? + 이 계좌를 정말 삭제하시겠습니까? libs/ui/src/lib/accounts-table/accounts-table.component.ts 146 @@ -721,7 +721,7 @@ Find an account... - Find an account... + 계좌 검색... libs/ui/src/lib/assistant/assistant.component.ts 471 @@ -809,7 +809,7 @@ First Activity - 첫 활동 + 첫 거래 apps/client/src/app/components/admin-market-data/admin-market-data.html 147 @@ -829,7 +829,7 @@ Activities Count - 활동 수 + 거래 건수 apps/client/src/app/components/admin-market-data/admin-market-data.html 156 @@ -901,7 +901,7 @@ Healthcare - Healthcare + 헬스케어 libs/ui/src/lib/i18n.ts 92 @@ -1017,7 +1017,7 @@ Technology - Technology + 기술 libs/ui/src/lib/i18n.ts 96 @@ -1073,7 +1073,7 @@ Industrials - Industrials + 산업재 libs/ui/src/lib/i18n.ts 93 @@ -1109,7 +1109,7 @@ Consumer Cyclical - Consumer Cyclical + 임의소비재 libs/ui/src/lib/i18n.ts 88 @@ -1269,7 +1269,7 @@ Asset profile has been saved - Asset profile has been saved + 자산 정보가 저장되었습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 624 @@ -1285,7 +1285,7 @@ Explore - Explore + 둘러보기 apps/client/src/app/pages/resources/overview/resources-overview.component.html 11 @@ -1449,7 +1449,7 @@ Could not validate form - Could not validate form + 양식 유효성 검사에 실패했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 600 @@ -1573,7 +1573,7 @@ Manage Activities - 활동 관리 + 거래 내역 관리 apps/client/src/app/components/home-holdings/home-holdings.html 64 @@ -1649,7 +1649,7 @@ Setup your accounts - 계정 설정 + 계좌 설정 apps/client/src/app/components/home-overview/home-overview.html 16 @@ -1665,7 +1665,7 @@ Capture your activities - 활동을 캡처하세요 + 거래를 기록하세요 apps/client/src/app/components/home-overview/home-overview.html 25 @@ -1673,7 +1673,7 @@ Record your investment activities to keep your portfolio up to date. - 투자 활동을 기록하여 포트폴리오를 최신 상태로 유지하세요. + 투자 거래 내역을 기록하여 포트폴리오를 최신 상태로 유지하세요. apps/client/src/app/components/home-overview/home-overview.html 27 @@ -1697,7 +1697,7 @@ Setup accounts - 계정 설정 + 계좌 설정 apps/client/src/app/components/home-overview/home-overview.html 49 @@ -1713,7 +1713,7 @@ Add activity - 활동 추가 + 거래 추가 apps/client/src/app/components/home-overview/home-overview.html 57 @@ -1733,7 +1733,7 @@ Code - Code + 코드 apps/client/src/app/components/admin-overview/admin-overview.html 159 @@ -1829,7 +1829,7 @@ Energy - Energy + 에너지 libs/ui/src/lib/i18n.ts 90 @@ -2225,7 +2225,7 @@ Performance with currency effect - Performance with currency effect + 환율 효과 반영 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 134 @@ -2285,7 +2285,7 @@ Consumer Defensive - Consumer Defensive + 필수소비재 libs/ui/src/lib/i18n.ts 89 @@ -2365,7 +2365,7 @@ Utilities - Utilities + 유틸리티 libs/ui/src/lib/i18n.ts 97 @@ -2689,7 +2689,7 @@ Accounts - 계정 + 계좌 apps/client/src/app/components/admin-platform/admin-platform.component.html 52 @@ -2737,7 +2737,7 @@ Update account - 계정 업데이트 + 계좌 수정 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 8 @@ -2745,7 +2745,7 @@ Add account - 계정 추가 + 계좌 추가 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 10 @@ -2753,7 +2753,7 @@ Account ID - 계정 ID + 계좌 ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 96 @@ -2993,7 +2993,7 @@ Could not parse scraper configuration - Could not parse scraper configuration + 스크래퍼 설정을 파싱할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 551 @@ -3021,7 +3021,7 @@ Duration - Duration + 기간 apps/client/src/app/components/admin-overview/admin-overview.html 172 @@ -3109,7 +3109,7 @@ Multi-Accounts - 다중 계정 + 다중 계좌 apps/client/src/app/pages/features/features-page.html 127 @@ -3421,7 +3421,7 @@ Basic Materials - Basic Materials + 기초소재 libs/ui/src/lib/i18n.ts 86 @@ -3741,7 +3741,7 @@ Activities - 활동 + 거래 내역 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 84 @@ -3793,7 +3793,7 @@ Do you really want to delete these activities? - 정말로 이 활동을 삭제하시겠습니까? + 정말로 이 거래들을 삭제하시겠습니까? libs/ui/src/lib/activities-table/activities-table.component.ts 304 @@ -3801,7 +3801,7 @@ Update activity - 활동 업데이트 + 거래 수정 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 10 @@ -3821,7 +3821,7 @@ One-time fee, annual account fees - 일회성 수수료, 연간 계정 수수료 + 일회성 수수료, 연간 계좌 수수료 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 33 @@ -3881,7 +3881,7 @@ Import Activities - 활동 가져오기 + 거래 내역 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 94 @@ -4005,7 +4005,7 @@ Select Activities - 활동 선택 + 거래 선택 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 115 @@ -4025,7 +4025,7 @@ Allocations - 할당 + 자산 배분 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 4 @@ -4065,7 +4065,7 @@ By Asset Class - 자산 클래스별 + 자산군별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 83 @@ -4141,7 +4141,7 @@ Latest activities - 최신 활동 + 최신 거래 내역 apps/client/src/app/pages/public/public-page.html 210 @@ -4173,7 +4173,7 @@ By Account - 계정별 + 계좌별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 282 @@ -4429,7 +4429,7 @@ Unlimited Accounts - 무제한 계정 + 무제한 계좌 apps/client/src/app/pages/pricing/pricing-page.html 39 @@ -4553,7 +4553,7 @@ Could not save asset profile - Could not save asset profile + 자산 정보를 저장할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 634 @@ -5038,7 +5038,7 @@ Do you really want to delete this account balance? - 정말로 이 계정 잔액을 삭제하시겠습니까? + 정말로 이 계좌 잔액을 삭제하시겠습니까? libs/ui/src/lib/account-balances/account-balances.component.ts 113 @@ -5046,7 +5046,7 @@ Export Activities - 수출 활동 + 거래 내역 내보내기 libs/ui/src/lib/activities-table/activities-table.component.html 64 @@ -5094,7 +5094,7 @@ Do you really want to delete this activity? - 정말로 이 활동을 삭제하시겠습니까? + 정말로 이 거래를 삭제하시겠습니까? libs/ui/src/lib/activities-table/activities-table.component.ts 314 @@ -5146,7 +5146,7 @@ Change from All Time High - 역대 최고치에서 변화 + 역대 최고점 대비 변동 libs/ui/src/lib/benchmark/benchmark.component.html 128 @@ -5170,7 +5170,7 @@ Loan - Loan + 대출 libs/ui/src/lib/i18n.ts 60 @@ -5246,7 +5246,7 @@ Allocation - 배당 + 자산 배분 libs/ui/src/lib/accounts-table/accounts-table.component.html 248 @@ -5274,7 +5274,7 @@ Account - 계정 + 계좌 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 86 @@ -5302,7 +5302,7 @@ Asset Class - 자산 클래스 + 자산군 apps/client/src/app/components/admin-market-data/admin-market-data.html 114 @@ -5334,7 +5334,7 @@ Asset Sub Class - 자산 하위 클래스 + 하위 자산군 apps/client/src/app/components/admin-market-data/admin-market-data.html 123 @@ -5474,7 +5474,7 @@ No Activities - No Activities + 거래 내역 없음 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 150 @@ -5490,7 +5490,7 @@ Everything in Basic, plus - Everything in Basic, plus + Basic의 모든 기능에 더해 apps/client/src/app/pages/pricing/pricing-page.html 199 @@ -5594,7 +5594,7 @@ Fee - 요금 + 수수료 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 255 @@ -5770,7 +5770,7 @@ Communication Services - Communication Services + 커뮤니케이션 서비스 libs/ui/src/lib/i18n.ts 87 @@ -5986,7 +5986,7 @@ Close Holding - 닫기 보유 + 보유 포지션 종료 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 447 @@ -6203,7 +6203,7 @@ Find a holding... - Find a holding... + 보유 종목 검색... libs/ui/src/lib/assistant/assistant.component.ts 472 @@ -6263,7 +6263,7 @@ Activity - 활동 + 거래 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 227 @@ -6319,7 +6319,7 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} - {VAR_PLURAL, 복수형, =1 {활동} 기타 {활동}} + {VAR_PLURAL, plural, =1 {거래} other {거래}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 14 @@ -6327,7 +6327,7 @@ Delete Activities - 활동 삭제 + 거래 삭제 libs/ui/src/lib/activities-table/activities-table.component.html 92 @@ -6359,7 +6359,7 @@ Jump to a page... - Jump to a page... + 페이지 이동... libs/ui/src/lib/assistant/assistant.component.ts 473 @@ -6375,7 +6375,7 @@ Approximation based on the top holdings of each ETF - 각 ETF의 상위 보유량을 기준으로 한 근사치 + 각 ETF의 상위 보유 종목을 기준으로 한 근사치 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 334 @@ -6383,7 +6383,7 @@ By ETF Holding - ETF 홀딩으로 + ETF 보유 종목별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 327 @@ -6587,7 +6587,7 @@ View Holding - 보유보기 + 보유 종목 보기 libs/ui/src/lib/activities-table/activities-table.component.html 474 @@ -6875,7 +6875,7 @@ Performance with currency effect Performance - 환율 효과가 있는 실적 실적 + 환율 효과 반영 수익률 수익률 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 83 @@ -6891,7 +6891,7 @@ Change with currency effect Change - 통화 효과로 변경 변경 + 환율 효과 반영 변동 변동 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 63 @@ -6915,7 +6915,7 @@ has been copied to the clipboard - has been copied to the clipboard + 가 클립보드에 복사되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts 378 @@ -6967,7 +6967,7 @@ Financial Services - Financial Services + 금융 서비스 libs/ui/src/lib/i18n.ts 91 @@ -7385,7 +7385,7 @@ Change with currency effect - Change with currency effect + 환율 효과 반영 변동 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 115 @@ -7489,7 +7489,7 @@ Change - 변화 + 변동 libs/ui/src/lib/holdings-table/holdings-table.component.html 143 @@ -7501,7 +7501,7 @@ Performance - 성능 + 성과 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 6 @@ -7541,7 +7541,7 @@ Total amount - Total amount + 총액 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 94 @@ -7706,7 +7706,7 @@ Performance Calculation - 성능 계산 + 성과 계산 apps/client/src/app/components/user-account-settings/user-account-settings.html 31 @@ -7811,7 +7811,7 @@ No emergency fund has been set up - 비상금은 마련되지 않았습니다 + 비상금이 설정되지 않았습니다. apps/client/src/app/pages/i18n/i18n-page.html 147 @@ -7819,7 +7819,7 @@ An emergency fund has been set up - 비상금이 마련됐어요 + 비상금이 설정되어 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 150 @@ -7827,7 +7827,7 @@ Fee Ratio - Fee Ratio + 수수료 비율 apps/client/src/app/pages/i18n/i18n-page.html 152 @@ -7835,7 +7835,7 @@ The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) + 수수료가 총 투자 금액의 ${thresholdMax}%를 초과합니다 (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 154 @@ -7843,7 +7843,7 @@ The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) + 수수료가 총 투자 금액의 ${thresholdMax}%를 초과하지 않습니다 (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 158 @@ -7883,7 +7883,7 @@ Single Account - 단일 계정 + 단일 계좌 apps/client/src/app/pages/i18n/i18n-page.html 28 @@ -7891,7 +7891,7 @@ Your net worth is managed by a single account - 귀하의 순자산은 단일 계정으로 관리됩니다 + 귀하의 순자산은 단일 계좌로 관리됩니다 apps/client/src/app/pages/i18n/i18n-page.html 30 @@ -7899,7 +7899,7 @@ Your net worth is managed by ${accountsLength} accounts - 귀하의 순자산은 ${accountsLength} 계정에서 관리됩니다. + 귀하의 순자산은 ${accountsLength}개의 계좌에서 관리됩니다. apps/client/src/app/pages/i18n/i18n-page.html 36 @@ -8025,7 +8025,7 @@ Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) - 현재 투자의 ${thresholdMax}% 이상이 ${maxAccountName} (${maxInvestmentRatio}%)에 있습니다. + 현재 투자 자산의 ${thresholdMax}% 이상이 ${maxAccountName} 계좌 (${maxInvestmentRatio}%)에 집중되어 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 17 @@ -8033,7 +8033,7 @@ The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% - 현재 투자의 주요 부분은 ${maxAccountName} (${maxInvestmentRatio}%)이며 ${thresholdMax}%를 초과하지 않습니다. + 현재 투자 자산의 주요 부분이 ${maxAccountName} 계좌 (${maxInvestmentRatio}%)에 있으며, 설정된 기준(${thresholdMax}%)을 초과하지 않습니다. apps/client/src/app/pages/i18n/i18n-page.html 24 @@ -8049,7 +8049,7 @@ The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 주식 비중(${equityValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 43 @@ -8057,7 +8057,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% - 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 주식 비중(${equityValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 47 @@ -8065,7 +8065,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 주식 비중(${equityValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 51 @@ -8081,7 +8081,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 채권 비중(${fixedIncomeValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 57 @@ -8089,7 +8089,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 채권 비중(${fixedIncomeValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 61 @@ -8097,7 +8097,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 채권 비중(${fixedIncomeValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 66 @@ -8113,7 +8113,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - 현재 투자의 주요 부분이 기본 통화(${baseCurrency}의 ${baseCurrencyValueRatio}%)로 되어 있지 않습니다. + 현재 투자 자산의 상당 부분이 기준 통화가 아닙니다 (${baseCurrency} 비중: ${baseCurrencyValueRatio}%). apps/client/src/app/pages/i18n/i18n-page.html 88 @@ -8121,7 +8121,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - 현재 투자의 주요 부분은 기본 통화(${baseCurrency}의 ${baseCurrencyValueRatio}%)입니다. + 현재 투자 자산의 주요 부분이 기준 통화로 되어 있습니다 (${baseCurrency} 비중: ${baseCurrencyValueRatio}%). apps/client/src/app/pages/i18n/i18n-page.html 92 @@ -8137,7 +8137,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) - 현재 투자의 ${thresholdMax}% 이상이 ${currency}(${maxValueRatio}%)에 있습니다. + 현재 투자 자산의 ${thresholdMax}% 이상이 ${currency} 통화 (${maxValueRatio}%)에 집중되어 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 97 @@ -8145,7 +8145,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - 현재 투자의 주요 부분은 ${currency} (${maxValueRatio}%)이며 ${thresholdMax}%를 초과하지 않습니다. + 현재 투자 자산의 상당 부분이 ${currency} 통화 (${maxValueRatio}%)로 되어 있으며, 설정된 기준(${thresholdMax}%)을 초과하지 않습니다. apps/client/src/app/pages/i18n/i18n-page.html 101 @@ -8214,7 +8214,7 @@ - + apps/client/src/app/components/admin-users/admin-users.html 35 @@ -8266,7 +8266,7 @@ Account Cluster Risks - 계정 클러스터 위험 + 계좌 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 14 @@ -8274,7 +8274,7 @@ Asset Class Cluster Risks - 자산 클래스 클러스터 위험 + 자산군 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 39 @@ -8282,7 +8282,7 @@ Currency Cluster Risks - 통화 클러스터 위험 + 통화 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 83 @@ -8290,7 +8290,7 @@ Economic Market Cluster Risks - 경제 시장 클러스터 위험 + 경제 시장 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 106 @@ -8298,7 +8298,7 @@ Emergency Fund - 비상자금 + 비상금 apps/client/src/app/pages/i18n/i18n-page.html 144 @@ -8330,7 +8330,7 @@ Your buying power is below ${thresholdMin} ${baseCurrency} - 귀하의 구매력은 ${thresholdMin} ${baseCurrency} 미만입니다. + 매수 가능 금액이 ${thresholdMin} ${baseCurrency} 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 73 @@ -8338,7 +8338,7 @@ Your buying power is 0 ${baseCurrency} - 귀하의 구매력은 0입니다 ${baseCurrency} + 매수 가능 금액이 0 ${baseCurrency}입니다. apps/client/src/app/pages/i18n/i18n-page.html 77 @@ -8354,7 +8354,7 @@ Regional Market Cluster Risks - 지역 시장 클러스터 위험 + 지역 시장 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 163 @@ -8370,7 +8370,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 선진국 시장 비중(${developedMarketsValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 112 @@ -8378,7 +8378,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% - 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 선진국 시장 비중(${developedMarketsValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 117 @@ -8386,7 +8386,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 선진국 시장 비중(${developedMarketsValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 122 @@ -8402,7 +8402,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 신흥국 시장 비중(${emergingMarketsValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 130 @@ -8410,7 +8410,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% - 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 신흥국 시장 비중(${emergingMarketsValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 135 @@ -8418,7 +8418,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 신흥국 시장 비중(${emergingMarketsValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 140 @@ -8426,7 +8426,7 @@ No accounts have been set up - 설정된 계정이 없습니다. + 설정된 계좌가 없습니다. apps/client/src/app/pages/i18n/i18n-page.html 21 @@ -8434,7 +8434,7 @@ Your net worth is managed by 0 accounts - 귀하의 순자산은 0개의 계정에서 관리됩니다. + 귀하의 순자산은 0개의 계좌에서 관리됩니다. apps/client/src/app/pages/i18n/i18n-page.html 33 @@ -8450,7 +8450,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 아시아 태평양 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 167 @@ -8458,7 +8458,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 아시아 태평양 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 171 @@ -8466,7 +8466,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 아시아 태평양 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 175 @@ -8482,7 +8482,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 신흥국 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 183 @@ -8490,7 +8490,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 신흥국 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 187 @@ -8498,7 +8498,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 신흥국 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 191 @@ -8514,7 +8514,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 유럽 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 유럽 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 197 @@ -8522,7 +8522,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 유럽 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 유럽 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 201 @@ -8530,7 +8530,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 유럽 시장 기여도(${valueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 유럽 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 205 @@ -8546,7 +8546,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 일본 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 일본 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 211 @@ -8554,7 +8554,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 일본 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 일본 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 215 @@ -8562,7 +8562,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 일본 시장 기여도(${valueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 일본 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 219 @@ -8578,7 +8578,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 북미 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 225 @@ -8586,7 +8586,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 북미 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 229 @@ -8594,7 +8594,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 북미 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 233 From 124940bf53c19c25cdbffef92d0cc82c8387ffc7 Mon Sep 17 00:00:00 2001 From: Ankit Singh Date: Thu, 11 Jun 2026 20:56:38 +0530 Subject: [PATCH 20/42] Task/migrate various components from NgStyle to style bindings (#7008) * Migrate various components from NgStyle to style bindings * Update changelog --- CHANGELOG.md | 1 + .../benchmark-comparator.component.html | 2 +- .../benchmark-comparator.component.ts | 2 -- .../investment-chart/investment-chart.component.html | 2 +- .../investment-chart/investment-chart.component.ts | 3 +-- .../app/pages/portfolio/fire/fire-page.component.ts | 3 +-- .../src/app/pages/portfolio/fire/fire-page.html | 11 ++++++----- .../fire-calculator/fire-calculator.component.html | 2 +- libs/ui/src/lib/line-chart/line-chart.component.html | 5 +---- libs/ui/src/lib/line-chart/line-chart.component.ts | 3 +-- .../portfolio-proportion-chart.component.html | 5 +---- .../portfolio-proportion-chart.component.ts | 3 +-- .../premium-indicator.component.html | 2 +- .../premium-indicator/premium-indicator.component.ts | 3 +-- .../lib/treemap-chart/treemap-chart.component.html | 5 +---- .../src/lib/treemap-chart/treemap-chart.component.ts | 3 +-- 16 files changed, 20 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 240ca983f..d344a14c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Migrated various components from `NgStyle` to style bindings - Improved the language localization for Korean (`ko`) ## 3.8.0 - 2026-06-07 diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html index 4d74c2559..328cccba1 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html @@ -53,6 +53,6 @@
diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts index d2dc9e1bb..8d13fb91d 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -17,7 +17,6 @@ import { ColorScheme } from '@ghostfolio/common/types'; import { registerChartConfiguration } from '@ghostfolio/ui/chart'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -53,7 +52,6 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [ - CommonModule, FormsModule, GfPremiumIndicatorComponent, IonIcon, diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.html b/apps/client/src/app/components/investment-chart/investment-chart.component.html index 6f7b083e5..864050ea8 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.html +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.html @@ -10,5 +10,5 @@ diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index 691133009..e55aebdda 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -16,7 +16,6 @@ import { InvestmentItem } from '@ghostfolio/common/interfaces/investment-item.in import { ColorScheme, GroupBy } from '@ghostfolio/common/types'; import { registerChartConfiguration } from '@ghostfolio/ui/chart'; -import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -49,7 +48,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-investment-chart', styleUrls: ['./investment-chart.component.scss'], templateUrl: './investment-chart.component.html' diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index dc0a1d776..04165ab11 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -12,7 +12,7 @@ import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; -import { CommonModule, NgStyle } from '@angular/common'; +import { CommonModule } from '@angular/common'; import { ChangeDetectorRef, Component, @@ -35,7 +35,6 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; GfFireCalculatorComponent, GfPremiumIndicatorComponent, GfValueComponent, - NgStyle, NgxSkeletonLoaderModule, ReactiveFormsModule ], diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.html b/apps/client/src/app/pages/portfolio/fire/fire-page.html index 76ad6cbf6..2730b35cd 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.html +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -19,14 +19,15 @@ !hasImpersonationId && hasPermissionToUpdateUserSettings " [locale]="user?.settings?.locale" - [ngStyle]="{ - opacity: user?.subscription?.type === 'Basic' ? '0.67' : 'initial', - 'pointer-events': - user?.subscription?.type === 'Basic' ? 'none' : 'initial' - }" [projectedTotalAmount]="user?.settings?.projectedTotalAmount" [retirementDate]="user?.settings?.retirementDate" [savingsRate]="user?.settings?.savingsRate" + [style.opacity]=" + user?.subscription?.type === 'Basic' ? '0.67' : 'initial' + " + [style.pointer-events]=" + user?.subscription?.type === 'Basic' ? 'none' : 'initial' + " (annualInterestRateChanged)="onAnnualInterestRateChange($event)" (calculationCompleted)="onCalculationComplete($event)" (projectedTotalAmountChanged)="onProjectedTotalAmountChange($event)" diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.html b/libs/ui/src/lib/fire-calculator/fire-calculator.component.html index 4f9ac456c..125c69a12 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.html +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.html @@ -81,7 +81,7 @@
diff --git a/libs/ui/src/lib/line-chart/line-chart.component.html b/libs/ui/src/lib/line-chart/line-chart.component.html index e9a5bbbe0..7f115967f 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.html +++ b/libs/ui/src/lib/line-chart/line-chart.component.html @@ -7,7 +7,4 @@ }" /> } - + 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 dd972bc5a..92ee8e4ec 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -12,7 +12,6 @@ import { import { LineChartItem } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; -import { CommonModule } from '@angular/common'; import { AfterViewInit, ChangeDetectionStrategy, @@ -43,7 +42,7 @@ import { registerChartConfiguration } from '../chart'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-line-chart', styleUrls: ['./line-chart.component.scss'], templateUrl: './line-chart.component.html' diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html index c7de5ef4d..75e545d30 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html @@ -7,7 +7,4 @@ }" /> } - + 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 7c17b587c..e2c41e956 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 @@ -7,7 +7,6 @@ import { } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; -import { CommonModule } from '@angular/common'; import { AfterViewInit, ChangeDetectionStrategy, @@ -54,7 +53,7 @@ const { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-portfolio-proportion-chart', styleUrls: ['./portfolio-proportion-chart.component.scss'], templateUrl: './portfolio-proportion-chart.component.html' diff --git a/libs/ui/src/lib/premium-indicator/premium-indicator.component.html b/libs/ui/src/lib/premium-indicator/premium-indicator.component.html index 3141414e7..71baae6cb 100644 --- a/libs/ui/src/lib/premium-indicator/premium-indicator.component.html +++ b/libs/ui/src/lib/premium-indicator/premium-indicator.component.html @@ -1,7 +1,7 @@ diff --git a/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts b/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts index b3ccfd88f..0c3cd6ad7 100644 --- a/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts +++ b/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts @@ -1,6 +1,5 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; -import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, @@ -14,7 +13,7 @@ import { diamondOutline } from 'ionicons/icons'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, IonIcon, RouterModule], + imports: [IonIcon, RouterModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-premium-indicator', styleUrls: ['./premium-indicator.component.scss'], diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.html b/libs/ui/src/lib/treemap-chart/treemap-chart.component.html index c7de5ef4d..75e545d30 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.html +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.html @@ -7,7 +7,4 @@ }" /> } - + 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 910914230..36ea0023a 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -10,7 +10,6 @@ import { } from '@ghostfolio/common/interfaces'; import { ColorScheme, DateRange } from '@ghostfolio/common/types'; -import { CommonModule } from '@angular/common'; import { AfterViewInit, ChangeDetectionStrategy, @@ -45,7 +44,7 @@ const { gray, green, red } = OpenColor; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-treemap-chart', styleUrls: ['./treemap-chart.component.scss'], templateUrl: './treemap-chart.component.html' From 3fb77bbc5150355d5c81d3aa31cd5ffb30ad1527 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 11 Jun 2026 22:44:57 +0200 Subject: [PATCH 21/42] Feature/support dedicated OpenRouter model for web_fetch tool in FetchService (#7005) * Add support for dedicated OpenRouter model for web_fetch * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/services/fetch/fetch.service.ts | 21 +++++++++++++------- libs/common/src/lib/config.ts | 1 + 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d344a14c4..c0c0835c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added support for a dedicated _OpenRouter_ model for the `web_fetch` tool in the `FetchService` + ### Changed - Prefilled the form in the account balance management with the current cash balance diff --git a/apps/api/src/services/fetch/fetch.service.ts b/apps/api/src/services/fetch/fetch.service.ts index 31034f81c..2425e476e 100644 --- a/apps/api/src/services/fetch/fetch.service.ts +++ b/apps/api/src/services/fetch/fetch.service.ts @@ -3,6 +3,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { PROPERTY_API_KEY_OPENROUTER, PROPERTY_OPENROUTER_MODEL, + PROPERTY_OPENROUTER_MODEL_WEB_FETCH, PROPERTY_WEB_FETCH_ROUTES } from '@ghostfolio/common/config'; @@ -80,12 +81,18 @@ export class FetchService implements OnModuleInit { url: string; webFetchRoute: WebFetchRoute; }) { - const [openRouterApiKey, openRouterModel] = await Promise.all([ - this.propertyService.getByKey(PROPERTY_API_KEY_OPENROUTER), - this.propertyService.getByKey(PROPERTY_OPENROUTER_MODEL) - ]); - - if (!openRouterApiKey || !openRouterModel) { + const [openRouterApiKey, openRouterModel, openRouterModelWebFetch] = + await Promise.all([ + this.propertyService.getByKey(PROPERTY_API_KEY_OPENROUTER), + this.propertyService.getByKey(PROPERTY_OPENROUTER_MODEL), + this.propertyService.getByKey( + PROPERTY_OPENROUTER_MODEL_WEB_FETCH + ) + ]); + + const model = openRouterModelWebFetch || openRouterModel; + + if (!model || !openRouterApiKey) { return undefined; } @@ -93,7 +100,7 @@ export class FetchService implements OnModuleInit { const openRouterService = createOpenRouter({ apiKey: openRouterApiKey }); const { sources, text } = await generateText({ - model: openRouterService.chat(openRouterModel), + model: openRouterService.chat(model), prompt: [ 'You have access to a web_fetch tool. You MUST call it to retrieve the URL below, do not answer from prior knowledge.', 'Return the fetched response body exactly as received: raw body only, no commentary, no Markdown, and no code fences.', diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 5f2dd9a1c..7e7cd2ba5 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -252,6 +252,7 @@ export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED'; export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE'; export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED'; export const PROPERTY_OPENROUTER_MODEL = 'OPENROUTER_MODEL'; +export const PROPERTY_OPENROUTER_MODEL_WEB_FETCH = 'OPENROUTER_MODEL_WEB_FETCH'; export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS'; export const PROPERTY_STRIPE_CONFIG = 'STRIPE_CONFIG'; export const PROPERTY_SYSTEM_MESSAGE = 'SYSTEM_MESSAGE'; From 9ea2405fec102625371becdeea243d71c152f84b Mon Sep 17 00:00:00 2001 From: Sjohn21 Date: Fri, 12 Jun 2026 20:09:43 +0200 Subject: [PATCH 22/42] Feature/extend public API with endpoint to update asset profile data (#6981) * Extend public API with endpoint to update asset profile data * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + README.md | 52 +++++++++++ apps/api/src/app/admin/admin.service.ts | 16 ++-- apps/api/src/app/app.module.ts | 2 + .../asset-profiles.controller.ts | 51 +++++++++++ .../asset-profiles/asset-profiles.module.ts | 13 +++ .../asset-profiles/asset-profiles.service.ts | 90 +++++++++++++++++++ .../symbol-profile/symbol-profile.service.ts | 27 +++++- libs/common/src/lib/dtos/index.ts | 2 + .../lib/dtos/update-asset-profile-data.dto.ts | 16 ++++ .../src/lib/dtos/update-asset-profile.dto.ts | 4 + 11 files changed, 262 insertions(+), 12 deletions(-) create mode 100644 apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts create mode 100644 apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts create mode 100644 apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts create mode 100644 libs/common/src/lib/dtos/update-asset-profile-data.dto.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c0835c1..d5ffbd4f3 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 +- Extended the _Public API_ with the endpoint to update the asset profile data (`PATCH api/v1/asset-profiles/:dataSource/:symbol`) (experimental) - Added support for a dedicated _OpenRouter_ model for the `web_fetch` tool in the `FetchService` ### Changed diff --git a/README.md b/README.md index 8557d4330..270b65126 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,58 @@ Grant access of type _Public_ in the _Access_ tab of _My Ghostfolio_. } ``` +### Update Asset Profile Data (experimental) + +#### Prerequisites + +[Bearer Token](#authorization-bearer-token) for authorization with admin role + +#### Request + +`PATCH http://localhost:3333/api/v1/asset-profiles//` + +#### Body + +``` +{ + "countries": [ + { + "code": "US", + "weight": 1 + } + ], + "sectors": [ + { + "name": "Technology", + "weight": 1 + } + ] +} +``` + +| Field | Type | Description | +| ----------- | ------------------ | ---------------------------------------------------------------------- | +| `countries` | `array` (optional) | Countries with `code` (`ISO 3166-1 alpha-2`) and `weight` (`0` to `1`) | +| `holdings` | `array` (optional) | Holdings with `name` and `weight` (`0` to `1`) | +| `sectors` | `array` (optional) | Sectors with `name` and `weight` (`0` to `1`) | + +#### Response + +##### Success + +`200 OK` + +##### Error + +`404 Not Found` + +``` +{ + "error": "Not Found", + "message": "Could not find the asset profile for MSFT (YAHOO)" +} +``` + ## Community Projects Discover a variety of community projects for Ghostfolio: https://github.com/topics/ghostfolio diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 948616d6c..7e7202306 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -593,6 +593,7 @@ export class AdminService { assetClass: assetClass as AssetClass, assetSubClass: assetSubClass as AssetSubClass, countries: countries as Prisma.JsonArray, + holdings: holdings as Prisma.JsonArray, name: name as string, sectors: sectors as Prisma.JsonArray, url: url as string @@ -602,21 +603,14 @@ export class AdminService { comment, currency, dataSource, - holdings, isActive, scraperConfiguration, symbol, symbolMapping, - ...(dataSource === 'MANUAL' - ? { assetClass, assetSubClass, countries, name, sectors, url } - : { - SymbolProfileOverrides: { - upsert: { - create: symbolProfileOverrides, - update: symbolProfileOverrides - } - } - }) + ...this.symbolProfileService.getAssetProfileUpdateInput( + { dataSource, symbol }, + symbolProfileOverrides + ) }; await this.symbolProfileService.updateSymbolProfile( diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 4857c7e14..0a27faa64 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -38,6 +38,7 @@ import { AuthModule } from './auth/auth.module'; import { CacheModule } from './cache/cache.module'; import { AiModule } from './endpoints/ai/ai.module'; import { ApiKeysModule } from './endpoints/api-keys/api-keys.module'; +import { AssetProfilesModule } from './endpoints/asset-profiles/asset-profiles.module'; import { AssetsModule } from './endpoints/assets/assets.module'; import { BenchmarksModule } from './endpoints/benchmarks/benchmarks.module'; import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module'; @@ -69,6 +70,7 @@ import { UserModule } from './user/user.module'; ActivitiesModule, AiModule, ApiKeysModule, + AssetProfilesModule, AssetModule, AssetsModule, AuthDeviceModule, diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts new file mode 100644 index 000000000..38227c555 --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts @@ -0,0 +1,51 @@ +import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; +import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; +import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; +import { EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; +import { permissions } from '@ghostfolio/common/permissions'; +import { RequestWithUser } from '@ghostfolio/common/types'; + +import { + Body, + Controller, + HttpException, + Inject, + Param, + Patch, + UseGuards +} from '@nestjs/common'; +import { REQUEST } from '@nestjs/core'; +import { AuthGuard } from '@nestjs/passport'; +import { DataSource } from '@prisma/client'; +import { StatusCodes, getReasonPhrase } from 'http-status-codes'; + +import { AssetProfilesService } from './asset-profiles.service'; + +@Controller('asset-profiles') +export class AssetProfilesController { + public constructor( + private readonly assetProfilesService: AssetProfilesService, + @Inject(REQUEST) private readonly request: RequestWithUser + ) {} + + @HasPermission(permissions.accessAdminControl) + @Patch(':dataSource/:symbol') + @UseGuards(AuthGuard('jwt'), HasPermissionGuard) + public async updateAssetProfileData( + @Body() assetProfileData: UpdateAssetProfileDataDto, + @Param('dataSource') dataSource: DataSource, + @Param('symbol') symbol: string + ): Promise { + if (!this.request.user.settings.settings.isExperimentalFeatures) { + throw new HttpException( + getReasonPhrase(StatusCodes.NOT_FOUND), + StatusCodes.NOT_FOUND + ); + } + + return this.assetProfilesService.updateAssetProfileData( + { dataSource, symbol }, + assetProfileData + ); + } +} diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts new file mode 100644 index 000000000..32b9ab393 --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts @@ -0,0 +1,13 @@ +import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; + +import { Module } from '@nestjs/common'; + +import { AssetProfilesController } from './asset-profiles.controller'; +import { AssetProfilesService } from './asset-profiles.service'; + +@Module({ + controllers: [AssetProfilesController], + imports: [SymbolProfileModule], + providers: [AssetProfilesService] +}) +export class AssetProfilesModule {} diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts new file mode 100644 index 000000000..ef24372af --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts @@ -0,0 +1,90 @@ +import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; +import { + AssetProfileIdentifier, + EnhancedSymbolProfile +} from '@ghostfolio/common/interfaces'; + +import { Injectable, NotFoundException } from '@nestjs/common'; +import { Prisma } from '@prisma/client'; + +@Injectable() +export class AssetProfilesService { + public constructor( + private readonly symbolProfileService: SymbolProfileService + ) {} + + public async updateAssetProfileData( + { dataSource, symbol }: AssetProfileIdentifier, + assetProfileData: UpdateAssetProfileDataDto + ): Promise { + const notFoundMessage = `Could not find the asset profile for ${symbol} (${dataSource})`; + + const data = this.getAssetProfileDataUpdate(assetProfileData); + + if (Object.keys(data).length > 0) { + try { + await this.symbolProfileService.updateSymbolProfile( + { + dataSource, + symbol + }, + this.symbolProfileService.getAssetProfileUpdateInput( + { dataSource, symbol }, + data + ) + ); + } catch (error) { + if ( + error instanceof Prisma.PrismaClientKnownRequestError && + error.code === 'P2025' + ) { + throw new NotFoundException(notFoundMessage); + } + + throw error; + } + } + + const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([ + { + dataSource, + symbol + } + ]); + + if (!assetProfile) { + throw new NotFoundException(notFoundMessage); + } + + return assetProfile; + } + + private getAssetProfileDataUpdate({ + countries, + holdings, + sectors + }: UpdateAssetProfileDataDto): Pick< + Prisma.SymbolProfileUpdateInput, + 'countries' | 'holdings' | 'sectors' + > { + const data: Pick< + Prisma.SymbolProfileUpdateInput, + 'countries' | 'holdings' | 'sectors' + > = {}; + + if (countries !== undefined) { + data.countries = countries as Prisma.JsonArray; + } + + if (holdings !== undefined) { + data.holdings = holdings as Prisma.JsonArray; + } + + if (sectors !== undefined) { + data.sectors = sectors as Prisma.JsonArray; + } + + return data; + } +} diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts index 413b7db03..2d5116274 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -11,7 +11,12 @@ import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Injectable } from '@nestjs/common'; -import { Prisma, SymbolProfile, SymbolProfileOverrides } from '@prisma/client'; +import { + DataSource, + Prisma, + SymbolProfile, + SymbolProfileOverrides +} from '@prisma/client'; import { continents, countries } from 'countries-list'; @Injectable() @@ -71,6 +76,26 @@ export class SymbolProfileService { }); } + public getAssetProfileUpdateInput( + { dataSource }: AssetProfileIdentifier, + data: Prisma.SymbolProfileUpdateInput + ): Prisma.SymbolProfileUpdateInput { + if (dataSource === DataSource.MANUAL) { + return data; + } + + return { + SymbolProfileOverrides: { + upsert: { + create: + data as Prisma.SymbolProfileOverridesCreateWithoutSymbolProfileInput, + update: + data as Prisma.SymbolProfileOverridesUpdateWithoutSymbolProfileInput + } + } + }; + } + public async getSymbolProfiles( aAssetProfileIdentifiers: AssetProfileIdentifier[] ): Promise { diff --git a/libs/common/src/lib/dtos/index.ts b/libs/common/src/lib/dtos/index.ts index 3631d6eae..cf0ce6f57 100644 --- a/libs/common/src/lib/dtos/index.ts +++ b/libs/common/src/lib/dtos/index.ts @@ -13,6 +13,7 @@ import { DeleteOwnUserDto } from './delete-own-user.dto'; import { TransferBalanceDto } from './transfer-balance.dto'; import { UpdateAccessDto } from './update-access.dto'; import { UpdateAccountDto } from './update-account.dto'; +import { UpdateAssetProfileDataDto } from './update-asset-profile-data.dto'; import { UpdateAssetProfileDto } from './update-asset-profile.dto'; import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto'; import { UpdateMarketDataDto } from './update-market-data.dto'; @@ -39,6 +40,7 @@ export { TransferBalanceDto, UpdateAccessDto, UpdateAccountDto, + UpdateAssetProfileDataDto, UpdateAssetProfileDto, UpdateBulkMarketDataDto, UpdateMarketDataDto, diff --git a/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts new file mode 100644 index 000000000..a2f600fcd --- /dev/null +++ b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts @@ -0,0 +1,16 @@ +import { Prisma } from '@prisma/client'; +import { IsArray, IsOptional } from 'class-validator'; + +export class UpdateAssetProfileDataDto { + @IsArray() + @IsOptional() + countries?: Prisma.InputJsonArray; + + @IsArray() + @IsOptional() + holdings?: Prisma.InputJsonArray; + + @IsArray() + @IsOptional() + sectors?: Prisma.InputJsonArray; +} diff --git a/libs/common/src/lib/dtos/update-asset-profile.dto.ts b/libs/common/src/lib/dtos/update-asset-profile.dto.ts index a4981493e..1c8af3e72 100644 --- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts @@ -36,6 +36,10 @@ export class UpdateAssetProfileDto { @IsOptional() dataSource?: DataSource; + @IsArray() + @IsOptional() + holdings?: Prisma.InputJsonArray; + @IsBoolean() @IsOptional() isActive?: boolean; From 6bbc96ccf09f742d3e1ea2512b0807d072cdbfc8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:19:47 +0200 Subject: [PATCH 23/42] Task/move support for specific calendar year date ranges in assistant from experimental to general availability (#7015) * Move specific calendar year date ranges from experimental to general availability * Update changelog --- CHANGELOG.md | 1 + .../src/lib/assistant/assistant.component.ts | 22 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5ffbd4f3..3ed1e80a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Moved the support for specific calendar year date ranges (`2025`, `2024`, `2023`, etc.) in the assistant from experimental to general availability - Migrated various components from `NgStyle` to style bindings - Improved the language localization for Korean (`ko`) diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 3c162a310..e52cefcbc 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -397,19 +397,17 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); } - if (this.user?.settings?.isExperimentalFeatures) { - this.dateRangeOptions = this.dateRangeOptions.concat( - eachYearOfInterval({ - end: new Date(), - start: this.user?.dateOfFirstActivity ?? new Date() + this.dateRangeOptions = this.dateRangeOptions.concat( + eachYearOfInterval({ + end: new Date(), + start: this.user?.dateOfFirstActivity ?? new Date() + }) + .map((date) => { + return { label: format(date, 'yyyy'), value: format(date, 'yyyy') }; }) - .map((date) => { - return { label: format(date, 'yyyy'), value: format(date, 'yyyy') }; - }) - .slice(0, -1) - .reverse() - ); - } + .slice(0, -1) + .reverse() + ); if ( this.user?.dateOfFirstActivity && From 68c11b9ee2b13e50267c2f996b1cd96d495acf73 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:32:37 +0200 Subject: [PATCH 24/42] Task/extend personal finance tools (20260612) (#7016) Extend personal finance tools --- libs/common/src/lib/personal-finance-tools.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 86cb1ca48..8698c76f7 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -372,12 +372,23 @@ export const personalFinanceTools: Product[] = [ slogan: 'All your wealth, in one place.', url: 'https://www.exirio.com' }, + { + hasFreePlan: false, + hasSelfHostingAbility: true, + key: 'expersoft', + name: 'Expersoft', + origin: 'CH', + slogan: 'Investment Management Platforms', + url: 'https://www.expersoft.com' + }, { founded: 2018, hasFreePlan: false, hasSelfHostingAbility: false, + isArchived: true, key: 'fey', name: 'Fey', + note: 'Fey was discontinued in 2025', origin: 'CA', pricingPerYear: '$300', slogan: 'Make better investments.', @@ -435,6 +446,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Easy-to-use Portfolio Tracker', url: 'https://fincake.io' }, + { + founded: 2015, + hasFreePlan: false, + key: 'fincite', + name: 'Fincite', + origin: 'DE', + slogan: 'Wealth Management Software', + url: 'https://fincite.de' + }, { founded: 2021, hasSelfHostingAbility: false, @@ -850,6 +870,23 @@ export const personalFinanceTools: Product[] = [ slogan: 'Dein Vermögen immer im Blick', url: 'https://www.parqet.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'patrice', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Português' + ], + name: 'Patrice', + pricingPerYear: '€49', + slogan: 'Votre patrimoine, enfin clair', + url: 'https://mypatrice.com' + }, { hasSelfHostingAbility: false, key: 'peek', @@ -986,6 +1023,13 @@ export const personalFinanceTools: Product[] = [ slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' }, + { + hasSelfHostingAbility: false, + key: 'quantive', + name: 'Quantive', + slogan: 'See your financial life clearly', + url: 'https://usequantive.app' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -1226,6 +1270,15 @@ export const personalFinanceTools: Product[] = [ url: 'https://www.utluna.com', useAnonymously: true }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'valuedge', + name: 'ValuEdge', + pricingPerYear: '€78', + slogan: 'Track your real portfolio. Not a watchlist.', + url: 'https://valuedge.app' + }, { founded: 2020, hasFreePlan: true, From 98c984c6c9b34efdf2e0aeeeb02f9851a9b76f42 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:33:01 +0200 Subject: [PATCH 25/42] Task/improve unknown bucket grouping in allocations (#7011) * Improve unknown bucket grouping * Update changelog --- CHANGELOG.md | 5 + .../app/portfolio/portfolio.service.spec.ts | 154 +++++++++++++ .../src/app/portfolio/portfolio.service.ts | 98 ++++---- .../allocations/allocations-page.component.ts | 214 ++++++++++-------- 4 files changed, 325 insertions(+), 146 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ed1e80a3..61a3e091a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,10 +16,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Grouped commodities and cryptocurrencies into the unknown bucket of the allocations by continent, country, currency, market and sector charts on the allocations page - Moved the support for specific calendar year date ranges (`2025`, `2024`, `2023`, etc.) in the assistant from experimental to general availability - Migrated various components from `NgStyle` to style bindings - Improved the language localization for Korean (`ko`) +### Fixed + +- Grouped activities without an account into the unknown bucket of the allocations by account and platform charts on the allocations page + ## 3.8.0 - 2026-06-07 ### Added diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts index 2d73bce3d..e0e7a8255 100644 --- a/apps/api/src/app/portfolio/portfolio.service.spec.ts +++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts @@ -9,6 +9,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { parseDate } from '@ghostfolio/common/helper'; import { Account, DataSource } from '@prisma/client'; @@ -108,6 +109,67 @@ describe('PortfolioService', () => { ); }); + describe('getAggregatedMarkets', () => { + const getAggregatedMarkets = (holdings: object) => { + return ( + portfolioService as unknown as { + getAggregatedMarkets: (aHoldings: object) => { + markets: Record< + string, + { valueInBaseCurrency: number; valueInPercentage: number } + >; + marketsAdvanced: Record; + }; + } + ).getAggregatedMarkets(holdings); + }; + + it('should distribute holdings with countries to their market and route holdings without countries (e.g. commodities, cryptocurrencies) to the unknown bucket', () => { + const holdings = { + 'GC=F': { + // Gold + assetProfile: { countries: [] }, + markets: { developedMarkets: 0, emergingMarkets: 0, otherMarkets: 0 }, + marketsAdvanced: { + asiaPacific: 0, + emergingMarkets: 0, + europe: 0, + japan: 0, + northAmerica: 0, + otherMarkets: 0 + }, + valueInBaseCurrency: 500 + }, + MSFT: { + assetProfile: { countries: [{ code: 'US', weight: 1 }] }, + markets: { developedMarkets: 1, emergingMarkets: 0, otherMarkets: 0 }, + marketsAdvanced: { + asiaPacific: 0, + emergingMarkets: 0, + europe: 0, + japan: 0, + northAmerica: 1, + otherMarkets: 0 + }, + valueInBaseCurrency: 1000 + } + }; + + const { markets, marketsAdvanced } = getAggregatedMarkets(holdings); + + expect(markets.developedMarkets.valueInBaseCurrency).toBe(1000); + expect(markets[UNKNOWN_KEY].valueInBaseCurrency).toBe(500); + + expect(markets.developedMarkets.valueInPercentage).toBeCloseTo( + 1000 / 1500 + ); + expect(markets[UNKNOWN_KEY].valueInPercentage).toBeCloseTo(500 / 1500); + + expect(marketsAdvanced.northAmerica.valueInBaseCurrency).toBe(1000); + expect(marketsAdvanced[UNKNOWN_KEY].valueInBaseCurrency).toBe(500); + }); + }); + describe('getCashSymbolProfiles', () => { it('should use the exchange-rate data source so the symbol-profile join in getDetails matches the calculator positions', () => { jest @@ -271,4 +333,96 @@ describe('PortfolioService', () => { expect(holdings['USD'].assetProfile.symbol).toBe('USD'); }); }); + + describe('getValueOfAccountsAndPlatforms', () => { + const getValueOfAccountsAndPlatforms = (args: object) => { + return ( + portfolioService as unknown as { + getValueOfAccountsAndPlatforms: (aArgs: object) => Promise<{ + accounts: Record; + platforms: Record; + }>; + } + ).getValueOfAccountsAndPlatforms(args); + }; + + const account = { + balance: 100, + currency: 'USD', + id: randomUUID(), + isExcluded: false, + name: 'Account 1', + platform: { name: 'Platform 1' }, + platformId: randomUUID() + }; + + beforeEach(() => { + jest + .spyOn(accountService, 'getAccounts') + .mockResolvedValue([account] as unknown as Account[]); + + jest + .spyOn(exchangeRateDataService, 'toCurrency') + .mockImplementation((aValue) => aValue); + }); + + it('should group activities without an account into the unknown bucket of accounts and platforms', async () => { + const { accounts, platforms } = await getValueOfAccountsAndPlatforms({ + activities: [ + { + account, + accountId: account.id, + quantity: 1, + SymbolProfile: { symbol: 'AAPL' }, + type: 'BUY' + }, + { + account: null, + accountId: null, + quantity: 2, + SymbolProfile: { symbol: 'BABA' }, + type: 'BUY' + } + ], + filters: [], + portfolioItemsNow: { + AAPL: { marketPriceInBaseCurrency: 10 }, + BABA: { marketPriceInBaseCurrency: 20 } + }, + userCurrency: 'USD', + userId: userDummyData.id + }); + + // 100 (balance) + 1 * 10 (activity) + expect(accounts[account.id].valueInBaseCurrency).toBe(110); + expect(platforms[account.platformId].valueInBaseCurrency).toBe(110); + + // 2 * 20 (activity without an account) + expect(accounts[UNKNOWN_KEY].valueInBaseCurrency).toBe(40); + expect(platforms[UNKNOWN_KEY].valueInBaseCurrency).toBe(40); + }); + + it('should not create an unknown bucket when every activity has an account', async () => { + const { accounts, platforms } = await getValueOfAccountsAndPlatforms({ + activities: [ + { + account, + accountId: account.id, + quantity: 1, + SymbolProfile: { symbol: 'AAPL' }, + type: 'BUY' + } + ], + filters: [], + portfolioItemsNow: { + AAPL: { marketPriceInBaseCurrency: 10 } + }, + userCurrency: 'USD', + userId: userDummyData.id + }); + + expect(accounts[UNKNOWN_KEY]).toBeUndefined(); + expect(platforms[UNKNOWN_KEY]).toBeUndefined(); + }); + }); }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 4feb0f77a..24d760888 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1453,31 +1453,29 @@ export class PortfolioService { for (const [, position] of Object.entries(holdings)) { const value = position.valueInBaseCurrency; - if (position.assetProfile.assetClass !== AssetClass.LIQUIDITY) { - if (position.assetProfile.countries.length > 0) { - markets.developedMarkets.valueInBaseCurrency += - position.markets.developedMarkets * value; - markets.emergingMarkets.valueInBaseCurrency += - position.markets.emergingMarkets * value; - markets.otherMarkets.valueInBaseCurrency += - position.markets.otherMarkets * value; - - marketsAdvanced.asiaPacific.valueInBaseCurrency += - position.marketsAdvanced.asiaPacific * value; - marketsAdvanced.emergingMarkets.valueInBaseCurrency += - position.marketsAdvanced.emergingMarkets * value; - marketsAdvanced.europe.valueInBaseCurrency += - position.marketsAdvanced.europe * value; - marketsAdvanced.japan.valueInBaseCurrency += - position.marketsAdvanced.japan * value; - marketsAdvanced.northAmerica.valueInBaseCurrency += - position.marketsAdvanced.northAmerica * value; - marketsAdvanced.otherMarkets.valueInBaseCurrency += - position.marketsAdvanced.otherMarkets * value; - } else { - markets[UNKNOWN_KEY].valueInBaseCurrency += value; - marketsAdvanced[UNKNOWN_KEY].valueInBaseCurrency += value; - } + if (position.assetProfile.countries.length > 0) { + markets.developedMarkets.valueInBaseCurrency += + position.markets.developedMarkets * value; + markets.emergingMarkets.valueInBaseCurrency += + position.markets.emergingMarkets * value; + markets.otherMarkets.valueInBaseCurrency += + position.markets.otherMarkets * value; + + marketsAdvanced.asiaPacific.valueInBaseCurrency += + position.marketsAdvanced.asiaPacific * value; + marketsAdvanced.emergingMarkets.valueInBaseCurrency += + position.marketsAdvanced.emergingMarkets * value; + marketsAdvanced.europe.valueInBaseCurrency += + position.marketsAdvanced.europe * value; + marketsAdvanced.japan.valueInBaseCurrency += + position.marketsAdvanced.japan * value; + marketsAdvanced.northAmerica.valueInBaseCurrency += + position.marketsAdvanced.northAmerica * value; + marketsAdvanced.otherMarkets.valueInBaseCurrency += + position.marketsAdvanced.otherMarkets * value; + } else { + markets[UNKNOWN_KEY].valueInBaseCurrency += value; + marketsAdvanced[UNKNOWN_KEY].valueInBaseCurrency += value; } } @@ -2163,40 +2161,44 @@ export class PortfolioService { return withExcludedAccounts || account.isExcluded === false; }); - for (const account of currentAccounts) { + // Iterate over the accounts plus a null entry to group activities without + // an account into the unknown bucket + for (const account of [...currentAccounts, null]) { const ordersByAccount = activities.filter(({ accountId }) => { - return accountId === account.id; + return account ? accountId === account.id : !accountId; }); - accounts[account.id] = { - balance: account.balance, - currency: account.currency, - name: account.name, - valueInBaseCurrency: this.exchangeRateDataService.toCurrency( - account.balance, - account.currency, - userCurrency - ) - }; - - if (platforms[account.platformId || UNKNOWN_KEY]?.valueInBaseCurrency) { - platforms[account.platformId || UNKNOWN_KEY].valueInBaseCurrency += - this.exchangeRateDataService.toCurrency( - account.balance, - account.currency, - userCurrency - ); - } else { - platforms[account.platformId || UNKNOWN_KEY] = { + if (account) { + accounts[account.id] = { balance: account.balance, currency: account.currency, - name: account.platform?.name, + name: account.name, valueInBaseCurrency: this.exchangeRateDataService.toCurrency( account.balance, account.currency, userCurrency ) }; + + if (platforms[account.platformId || UNKNOWN_KEY]?.valueInBaseCurrency) { + platforms[account.platformId || UNKNOWN_KEY].valueInBaseCurrency += + this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ); + } else { + platforms[account.platformId || UNKNOWN_KEY] = { + balance: account.balance, + currency: account.currency, + name: account.platform?.name, + valueInBaseCurrency: this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ) + }; + } } for (const { diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index d0eb3788b..d53977ae8 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -201,6 +201,26 @@ export class GfAllocationsPageComponent implements OnInit { } } + private extractCurrency({ + assetClass, + assetSubClass, + currency + }: { + assetClass: PortfolioPosition['assetProfile']['assetClass']; + assetSubClass: PortfolioPosition['assetProfile']['assetSubClass']; + currency?: PortfolioPosition['assetProfile']['currency']; + }) { + if ( + assetClass === AssetClass.COMMODITY || + assetSubClass === AssetSubClass.CRYPTOCURRENCY + ) { + // Commodities and cryptocurrencies have no meaningful currency exposure + return UNKNOWN_KEY; + } + + return currency; + } + private extractEtfProvider({ assetSubClass, name @@ -339,7 +359,7 @@ export class GfAllocationsPageComponent implements OnInit { position.assetProfile.assetSubClass || (UNKNOWN_KEY as AssetSubClass), assetSubClassLabel: position.assetProfile.assetSubClassLabel || UNKNOWN_KEY, - currency: position.assetProfile.currency, + currency: this.extractCurrency(position.assetProfile), etfProvider: this.extractEtfProvider({ assetSubClass: position.assetProfile.assetSubClass, name: position.assetProfile.name @@ -348,119 +368,117 @@ export class GfAllocationsPageComponent implements OnInit { name: position.assetProfile.name }; - if (position.assetProfile.assetClass !== AssetClass.LIQUIDITY) { - // Prepare analysis data by continents, countries, holdings and sectors except for liquidity - - if (position.assetProfile.countries.length > 0) { - for (const country of position.assetProfile.countries) { - const { code, continent, weight } = country; - - if (this.continents[continent]?.value) { - this.continents[continent].value += + // Prepare analysis data by continents, countries, holdings and sectors + + if (position.assetProfile.countries.length > 0) { + for (const country of position.assetProfile.countries) { + const { code, continent, weight } = country; + + if (this.continents[continent]?.value) { + this.continents[continent].value += + weight * + (isNumber(position.valueInBaseCurrency) + ? position.valueInBaseCurrency + : position.valueInPercentage); + } else { + this.continents[continent] = { + name: translate(continent), + value: weight * (isNumber(position.valueInBaseCurrency) - ? position.valueInBaseCurrency - : position.valueInPercentage); - } else { - this.continents[continent] = { - name: translate(continent), - value: - weight * - (isNumber(position.valueInBaseCurrency) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage) - }; - } - - if (this.countries[code]?.value) { - this.countries[code].value += + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage) + }; + } + + if (this.countries[code]?.value) { + this.countries[code].value += + weight * + (isNumber(position.valueInBaseCurrency) + ? position.valueInBaseCurrency + : position.valueInPercentage); + } else { + this.countries[code] = { + name: getCountryName({ + code, + locale: this.user?.settings?.locale + }), + value: weight * (isNumber(position.valueInBaseCurrency) - ? position.valueInBaseCurrency - : position.valueInPercentage); - } else { - this.countries[code] = { - name: getCountryName({ - code, - locale: this.user?.settings?.locale - }), - value: - weight * - (isNumber(position.valueInBaseCurrency) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage) - }; - } + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage) + }; } - } else { - this.continents[UNKNOWN_KEY].value += isNumber( - position.valueInBaseCurrency - ) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage; - - this.countries[UNKNOWN_KEY].value += isNumber( - position.valueInBaseCurrency - ) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage; } + } else { + this.continents[UNKNOWN_KEY].value += isNumber( + position.valueInBaseCurrency + ) + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage; + + this.countries[UNKNOWN_KEY].value += isNumber( + position.valueInBaseCurrency + ) + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage; + } - if (position.assetProfile.holdings.length > 0) { - for (const { - allocationInPercentage, - name, - valueInBaseCurrency - } of position.assetProfile.holdings) { - const normalizedAssetName = this.normalizeAssetName(name); - - if (this.topHoldingsMap[normalizedAssetName]?.value) { - this.topHoldingsMap[normalizedAssetName].value += isNumber( - valueInBaseCurrency - ) + if (position.assetProfile.holdings.length > 0) { + for (const { + allocationInPercentage, + name, + valueInBaseCurrency + } of position.assetProfile.holdings) { + const normalizedAssetName = this.normalizeAssetName(name); + + if (this.topHoldingsMap[normalizedAssetName]?.value) { + this.topHoldingsMap[normalizedAssetName].value += isNumber( + valueInBaseCurrency + ) + ? valueInBaseCurrency + : allocationInPercentage * + this.portfolioDetails.holdings[symbol].valueInPercentage; + } else { + this.topHoldingsMap[normalizedAssetName] = { + name, + value: isNumber(valueInBaseCurrency) ? valueInBaseCurrency : allocationInPercentage * - this.portfolioDetails.holdings[symbol].valueInPercentage; - } else { - this.topHoldingsMap[normalizedAssetName] = { - name, - value: isNumber(valueInBaseCurrency) - ? valueInBaseCurrency - : allocationInPercentage * - this.portfolioDetails.holdings[symbol].valueInPercentage - }; - } + this.portfolioDetails.holdings[symbol].valueInPercentage + }; } } + } - if (position.assetProfile.sectors.length > 0) { - for (const sector of position.assetProfile.sectors) { - const { name, weight } = sector; - - if (this.sectors[name]?.value) { - this.sectors[name].value += + if (position.assetProfile.sectors.length > 0) { + for (const sector of position.assetProfile.sectors) { + const { name, weight } = sector; + + if (this.sectors[name]?.value) { + this.sectors[name].value += + weight * + (isNumber(position.valueInBaseCurrency) + ? position.valueInBaseCurrency + : position.valueInPercentage); + } else { + this.sectors[name] = { + name: translate(name), + value: weight * (isNumber(position.valueInBaseCurrency) - ? position.valueInBaseCurrency - : position.valueInPercentage); - } else { - this.sectors[name] = { - name: translate(name), - value: - weight * - (isNumber(position.valueInBaseCurrency) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage) - }; - } + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage) + }; } - } else { - this.sectors[UNKNOWN_KEY].value += isNumber( - position.valueInBaseCurrency - ) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage; } + } else { + this.sectors[UNKNOWN_KEY].value += isNumber( + position.valueInBaseCurrency + ) + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage; } if (this.holdings[symbol].assetSubClass === 'ETF') { From fa6ca4dc442a5359d6cc6321a77eac703bdff6bb Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:36:31 +0200 Subject: [PATCH 26/42] Release 3.9.0 (#7017) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61a3e091a..dc584f345 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 3.9.0 - 2026-06-12 ### Added diff --git a/package-lock.json b/package-lock.json index 26f8ee255..94f874cb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.8.0", + "version": "3.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.8.0", + "version": "3.9.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 04f125aa7..a0be1c81c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.8.0", + "version": "3.9.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From b3bdfab419b68c1ac10aa34ff0c7d66a22ab622f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:01:49 +0200 Subject: [PATCH 27/42] Bugfix/issue in import dividends dialog (#7020) * Change to assetProfile * Update changelog --- CHANGELOG.md | 6 ++++++ .../import-activities-dialog.html | 11 +++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc584f345..3e3627950 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Fixed + +- Fixed an issue in the import dividends dialog + ## 3.9.0 - 2026-06-12 ### Added diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html index 85fb73ba2..506076afd 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -32,15 +32,18 @@ Holding {{ - assetProfileForm.get('assetProfileIdentifier')?.value?.name + assetProfileForm.get('assetProfileIdentifier')?.value + ?.assetProfile?.name }} @for (holding of holdings; track holding) { Date: Sat, 13 Jun 2026 13:06:24 +0200 Subject: [PATCH 28/42] Bugfix/last request date in users table of admin control panel (#7021) * Fix last request date * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e3627950..8399e1dcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed an issue in the import dividends dialog +- Fixed the last request date in the users table of the admin control panel ## 3.9.0 - 2026-06-12 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 7e7202306..be6f050c4 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -850,7 +850,7 @@ export class AdminService { activityCount: true, country: true, dataProviderGhostfolioDailyRequests: true, - updatedAt: true + lastRequestAt: true } }, createdAt: true, @@ -896,7 +896,7 @@ export class AdminService { activityCount: _count.activities || 0, country: analytics?.country, dailyApiRequests: analytics?.dataProviderGhostfolioDailyRequests || 0, - lastActivity: analytics?.updatedAt + lastActivity: analytics?.lastRequestAt }; } ); From 5743825bc63ea75b9428b4430798ec798d380c2c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 13:06:54 +0200 Subject: [PATCH 29/42] Task/improve dynamic numerical precision in account and holding detail dialogs on mobile (#7022) * Improve dynamic numerical precision for various values * Update changelog --- CHANGELOG.md | 5 +++++ .../account-detail-dialog.component.ts | 10 +++++----- .../holding-detail-dialog.component.ts | 17 ++++++++--------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8399e1dcf..021e69a07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed + +- Improved the dynamic numerical precision for various values in the account detail dialog on mobile +- Improved the dynamic numerical precision for various values in the holding detail dialog on mobile + ### Fixed - Fixed an issue in the import dividends dialog diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index d9b279040..7cdf3e671 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -3,7 +3,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_DATE_RANGE, DEFAULT_PAGE_SIZE, - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES } from '@ghostfolio/common/config'; import { CreateAccountBalanceDto } from '@ghostfolio/common/dtos'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; @@ -245,7 +245,7 @@ export class GfAccountDetailDialogComponent implements OnInit { this.balance = balance; if ( - this.balance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.balance >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES && this.data.deviceType === 'mobile' ) { this.balancePrecision = 0; @@ -257,7 +257,7 @@ export class GfAccountDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.dividendInBaseCurrency >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.dividendInBaseCurrencyPrecision = 0; } @@ -267,7 +267,7 @@ export class GfAccountDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.equity >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.equity >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.equityPrecision = 0; } @@ -280,7 +280,7 @@ export class GfAccountDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.interestInBaseCurrency >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.interestInBaseCurrencyPrecision = 0; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 68bb1215a..416e9106d 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -2,8 +2,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_PAGE_SIZE, NUMERICAL_PRECISION_THRESHOLD_3_FIGURES, - NUMERICAL_PRECISION_THRESHOLD_5_FIGURES, - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES } from '@ghostfolio/common/config'; import { CreateOrderDto } from '@ghostfolio/common/dtos'; import { @@ -282,7 +281,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.averagePrice = averagePrice; if ( - this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES && this.data.deviceType === 'mobile' ) { this.averagePricePrecision = 0; @@ -297,7 +296,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.dividendInBaseCurrency >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.dividendInBaseCurrencyPrecision = 0; } @@ -335,7 +334,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.investmentInBaseCurrencyWithCurrencyEffect >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0; } @@ -345,7 +344,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.marketPriceMaxPrecision = 0; } @@ -354,14 +353,14 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.marketPriceMinPrecision = 0; } if ( this.data.deviceType === 'mobile' && - this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.marketPricePrecision = 0; } @@ -370,7 +369,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.netPerformancePrecision = 0; } From f4b3a671c75ca76eff2d0ec22db0811908e6286c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:08:59 +0200 Subject: [PATCH 30/42] Task/optimize portfolio holding endpoint by improving processing of historical market data (#7023) * Improve processing of historical market data * Update changelog --- CHANGELOG.md | 1 + .../src/services/data-provider/data-provider.service.ts | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 021e69a07..ab6db98a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the dynamic numerical precision for various values in the account detail dialog on mobile - Improved the dynamic numerical precision for various values in the holding detail dialog on mobile +- Optimized the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` by improving the processing of the historical market data ### Fixed diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 1ea2d6436..5b54afb0b 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -385,10 +385,11 @@ export class DataProviderService implements OnModuleInit { response = marketDataByGranularity.reduce((r, marketData) => { const { date, marketPrice, symbol } = marketData; - r[symbol] = { - ...(r[symbol] || {}), - [format(new Date(date), DATE_FORMAT)]: { marketPrice } - }; + if (!r[symbol]) { + r[symbol] = {}; + } + + r[symbol][format(new Date(date), DATE_FORMAT)] = { marketPrice }; return r; }, {}); From a19bd1fc022790038f01a44d01cd8c2050a831de Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:10:46 +0200 Subject: [PATCH 31/42] Bugfix/false positive in currency symbol detection (#7024) * Fix issue where certain symbols (e.g. ERNA.L) were incorrectly identified as currencies * Update changelog --- CHANGELOG.md | 1 + .../yahoo-finance/yahoo-finance.service.ts | 40 +++++------- .../eod-historical-data.service.ts | 19 ++---- .../financial-modeling-prep.service.ts | 16 +++-- libs/common/src/lib/helper.spec.ts | 61 ++++++++++++++++++- libs/common/src/lib/helper.ts | 14 +++++ 6 files changed, 102 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab6db98a9..69efdefe4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed an issue in the import dividends dialog +- Fixed an issue where certain symbols were incorrectly identified as currencies in various data providers - Fixed the last request date in the users table of the admin control panel ## 3.9.0 - 2026-06-12 diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 4fb0e96ed..85ec6c020 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -6,7 +6,7 @@ import { DEFAULT_CURRENCY, REPLACE_NAME_PARTS } from '@ghostfolio/common/config'; -import { isCurrency } from '@ghostfolio/common/helper'; +import { isCurrencySymbol } from '@ghostfolio/common/helper'; import { SectorName } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; @@ -73,31 +73,21 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { * DOGEUSD -> DOGE-USD */ public convertToYahooFinanceSymbol(aSymbol: string) { - if ( - aSymbol.includes(DEFAULT_CURRENCY) && - aSymbol.length > DEFAULT_CURRENCY.length + if (isCurrencySymbol(aSymbol)) { + return `${aSymbol}=X`; + } else if ( + this.cryptocurrencyService.isCryptocurrency( + aSymbol.replace(new RegExp(`-${DEFAULT_CURRENCY}$`), DEFAULT_CURRENCY) + ) ) { - if ( - isCurrency( - aSymbol.substring(0, aSymbol.length - DEFAULT_CURRENCY.length) - ) && - isCurrency(aSymbol.substring(aSymbol.length - DEFAULT_CURRENCY.length)) - ) { - return `${aSymbol}=X`; - } else if ( - this.cryptocurrencyService.isCryptocurrency( - aSymbol.replace(new RegExp(`-${DEFAULT_CURRENCY}$`), DEFAULT_CURRENCY) - ) - ) { - // Add a dash before the last three characters - // BTCUSD -> BTC-USD - // DOGEUSD -> DOGE-USD - // SOL1USD -> SOL1-USD - return aSymbol.replace( - new RegExp(`-?${DEFAULT_CURRENCY}$`), - `-${DEFAULT_CURRENCY}` - ); - } + // Add a dash before the last three characters + // BTCUSD -> BTC-USD + // DOGEUSD -> DOGE-USD + // SOL1USD -> SOL1-USD + return aSymbol.replace( + new RegExp(`-?${DEFAULT_CURRENCY}$`), + `-${DEFAULT_CURRENCY}` + ); } return aSymbol; diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 06173c25b..ebb6cd743 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -13,7 +13,7 @@ import { DEFAULT_CURRENCY, REPLACE_NAME_PARTS } from '@ghostfolio/common/config'; -import { DATE_FORMAT, isCurrency } from '@ghostfolio/common/helper'; +import { DATE_FORMAT, isCurrencySymbol } from '@ghostfolio/common/helper'; import { DataProviderHistoricalResponse, DataProviderInfo, @@ -382,20 +382,11 @@ export class EodHistoricalDataService * Currency: USDCHF -> USDCHF.FOREX */ private convertToEodSymbol(aSymbol: string) { - if ( - aSymbol.startsWith(DEFAULT_CURRENCY) && - aSymbol.length > DEFAULT_CURRENCY.length - ) { - if ( - isCurrency( - aSymbol.substring(0, aSymbol.length - DEFAULT_CURRENCY.length) - ) - ) { - let symbol = aSymbol; - symbol = symbol.replace('GBp', 'GBX'); + if (isCurrencySymbol(aSymbol)) { + let symbol = aSymbol; + symbol = symbol.replace('GBp', 'GBX'); - return `${symbol}.FOREX`; - } + return `${symbol}.FOREX`; } return aSymbol; diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 157285278..ca48bb247 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -16,7 +16,11 @@ import { DEFAULT_CURRENCY, REPLACE_NAME_PARTS } from '@ghostfolio/common/config'; -import { DATE_FORMAT, isCurrency, parseDate } from '@ghostfolio/common/helper'; +import { + DATE_FORMAT, + isCurrencySymbol, + parseDate +} from '@ghostfolio/common/helper'; import { DataProviderHistoricalResponse, DataProviderInfo, @@ -86,9 +90,7 @@ export class FinancialModelingPrepService }; try { - if ( - isCurrency(symbol.substring(0, symbol.length - DEFAULT_CURRENCY.length)) - ) { + if (isCurrencySymbol(symbol)) { response.assetClass = AssetClass.LIQUIDITY; response.assetSubClass = AssetSubClass.CASH; response.currency = symbol.substring( @@ -482,11 +484,7 @@ export class FinancialModelingPrepService for (const { price, symbol } of quotes) { let marketState: MarketState = 'delayed'; - if ( - isCurrency( - symbol.substring(0, symbol.length - DEFAULT_CURRENCY.length) - ) - ) { + if (isCurrencySymbol(symbol)) { marketState = 'open'; } diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts index a339c6dab..6a6fe4773 100644 --- a/libs/common/src/lib/helper.spec.ts +++ b/libs/common/src/lib/helper.spec.ts @@ -1,6 +1,8 @@ import { extractNumberFromString, - getNumberFormatGroup + getNumberFormatGroup, + isCurrency, + isCurrencySymbol } from '@ghostfolio/common/helper'; describe('Helper', () => { @@ -116,4 +118,61 @@ describe('Helper', () => { expect(getNumberFormatGroup()).toEqual(','); }); }); + + describe('Is currency', () => { + it('ISO 4217 currency code', () => { + expect(isCurrency('USD')).toEqual(true); + }); + + it('Derived currency', () => { + expect(isCurrency('GBp')).toEqual(true); + }); + + it('Non-currency', () => { + expect(isCurrency('AAPL')).toEqual(false); + }); + + it('Empty currency', () => { + expect(isCurrency('')).toEqual(false); + }); + }); + + describe('Is currency symbol', () => { + it('Currency symbol (default currency as base)', () => { + expect(isCurrencySymbol('USDCHF')).toEqual(true); + expect(isCurrencySymbol('USDZAR')).toEqual(true); + }); + + it('Currency symbol (default currency as quote)', () => { + expect(isCurrencySymbol('EURUSD')).toEqual(true); + }); + + it('Currency symbol (derived currency)', () => { + expect(isCurrencySymbol('USDGBp')).toEqual(true); + }); + + it('Stock symbol with currency-like prefix', () => { + expect(isCurrencySymbol('ERNA.L')).toEqual(false); + }); + + it('Cryptocurrency symbol', () => { + expect(isCurrencySymbol('BTCUSD')).toEqual(false); + }); + + it('Stock symbol', () => { + expect(isCurrencySymbol('AAPL')).toEqual(false); + }); + + it('Symbol with non-currency suffix', () => { + expect(isCurrencySymbol('USD.AX')).toEqual(false); + }); + + it('Plain currency code', () => { + expect(isCurrencySymbol('USD')).toEqual(false); + }); + + it('Empty symbol', () => { + expect(isCurrencySymbol('')).toEqual(false); + }); + }); }); diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index ce7fca518..68b8c51bd 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -445,6 +445,20 @@ export function isCurrency(aCurrency: string) { return isISO4217CurrencyCode(aCurrency) || isDerivedCurrency(aCurrency); } +export function isCurrencySymbol(aSymbol: string) { + if (!aSymbol) { + return false; + } + + return ( + aSymbol.length >= 2 * DEFAULT_CURRENCY.length && + isCurrency( + aSymbol.substring(0, aSymbol.length - DEFAULT_CURRENCY.length) + ) && + isCurrency(aSymbol.substring(aSymbol.length - DEFAULT_CURRENCY.length)) + ); +} + export function isDerivedCurrency(aCurrency: string) { if (aCurrency === 'USX') { return true; From 20cb189bae505a1b9df4bb68e1377635872efa1c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:31:48 +0200 Subject: [PATCH 32/42] Task/improve account name display in activities table (#7025) * Do not wrap account name * Update changelog --- CHANGELOG.md | 1 + .../src/lib/activities-table/activities-table.component.html | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69efdefe4..ebf538c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the dynamic numerical precision for various values in the account detail dialog on mobile - Improved the dynamic numerical precision for various values in the holding detail dialog on mobile +- Improved the account name display in the activities table - Optimized the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` by improving the processing of the historical market data ### Fixed diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index ae5cf0384..1e57e8c7e 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -347,7 +347,9 @@ [url]="element.account?.platform?.url" /> } - {{ element.account?.name }} + {{ + element.account?.name + }}
From 1dab25c7dc21e0f4e3068dc2328054fdfc43ab47 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:34:07 +0200 Subject: [PATCH 33/42] Release 3.10.0 (#7027) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebf538c2d..815751230 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 3.10.0 - 2026-06-13 ### Changed diff --git a/package-lock.json b/package-lock.json index 94f874cb2..bcae6f86e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.9.0", + "version": "3.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.9.0", + "version": "3.10.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a0be1c81c..730145781 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.9.0", + "version": "3.10.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From c26cc21ce0e1e25b39ed33f0db62fde60e8e5f1e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 23:42:33 +0200 Subject: [PATCH 34/42] Task/upgrade bull-board to version 7.2.1 (#7031) * Upgrade bull-board to version 7.2.1 * Update changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 48 +++++++++++++++++++++++------------------------ package.json | 6 +++--- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 815751230..2141ce5a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `bull-board` from version `7.1.5` to `7.2.1` + ## 3.10.0 - 2026-06-13 ### Changed diff --git a/package-lock.json b/package-lock.json index bcae6f86e..95843c1a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,9 +21,9 @@ "@angular/platform-browser-dynamic": "21.2.7", "@angular/router": "21.2.7", "@angular/service-worker": "21.2.7", - "@bull-board/api": "7.1.5", - "@bull-board/express": "7.1.5", - "@bull-board/nestjs": "7.1.5", + "@bull-board/api": "7.2.1", + "@bull-board/express": "7.2.1", + "@bull-board/nestjs": "7.2.1", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.6", @@ -3523,33 +3523,33 @@ "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@bull-board/api": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-7.1.5.tgz", - "integrity": "sha512-EW0sbTtGIysu9vipdVpPQeToPqOpPgVZTt+pn1Ut3gbSS/GLWbEgIfFtMmSQDUoSL9WH00RzjgUY5K+43nWh0A==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-7.2.1.tgz", + "integrity": "sha512-ldRG4POJLHf6oDrbDA7AsbTKliBmV4eySlwdUAumiRDtfvtbRSdXGE4Md2uPDova1r/ck7ExEe1+pHEQAZElqw==", "license": "MIT", "dependencies": { "redis-info": "^3.1.0" }, "peerDependencies": { - "@bull-board/ui": "7.1.5" + "@bull-board/ui": "7.2.1" } }, "node_modules/@bull-board/express": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-7.1.5.tgz", - "integrity": "sha512-kp4SzhVjZlykryiQwcOhJjDhiLbBnZoAMoSgEstzqQ0raLw+jERRC6ryJ0MIQO+SO+Jv9EjjxrXCR8O2YSP/eg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-7.2.1.tgz", + "integrity": "sha512-tBr/xV5letzKYPRGRkilTQZmfoCoy3mCuUo4M2dDoDKOhbrF360mK5v9/rIcSgYSyI9c7BgEgrve80LhmexNxQ==", "license": "MIT", "dependencies": { - "@bull-board/api": "7.1.5", - "@bull-board/ui": "7.1.5", - "ejs": "^5.0.2", + "@bull-board/api": "7.2.1", + "@bull-board/ui": "7.2.1", + "ejs": "^6.0.1", "express": "^5.2.1" } }, "node_modules/@bull-board/express/node_modules/ejs": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-5.0.2.tgz", - "integrity": "sha512-IpbUaI/CAW86l3f+T8zN0iggSc0LmMZLcIW5eRVStLVNCoTXkE0YlncbbH50fp8Cl6zHIky0sW2uUbhBqGw0Jw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-6.0.1.tgz", + "integrity": "sha512-UaaM14yby8U3k02ihS1Bmj5Kz2d7CCQM1scxpgs4Mhkq8F1wR2gl3+Ts4h5Ne4Mnt7M9m4Dw7jsuMr3+xO4vZA==", "license": "Apache-2.0", "bin": { "ejs": "bin/cli.js" @@ -3559,12 +3559,12 @@ } }, "node_modules/@bull-board/nestjs": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-7.1.5.tgz", - "integrity": "sha512-1y+HkjnDaZoSCXJRsiYfBNBVx+PX3I8x3Uv+SSJuSpt2vHifMRwFbChO3XDxeWXetT1eR+yqPVq6ub5eJwNOYQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-7.2.1.tgz", + "integrity": "sha512-Uq2Z3+0ORgHJSw4TDV1kBrHdksRnK8CZdda63hrStduPnvKHPBxIZUGNfBN/vL08UqizpNkjFmNyNXiHOgf0LQ==", "license": "MIT", "peerDependencies": { - "@bull-board/api": "^7.1.5", + "@bull-board/api": "^7.2.1", "@nestjs/bull-shared": "^10.0.0 || ^11.0.0", "@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0", "@nestjs/core": "^9.0.0 || ^10.0.0 || ^11.0.0", @@ -3573,12 +3573,12 @@ } }, "node_modules/@bull-board/ui": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-7.1.5.tgz", - "integrity": "sha512-2IkatKwNRx/1M9/lAZIptcxS1FPNq6icpp2M46Upwd4olVxs/ujF9Kvs+Ff9ExtIO/OgYfwx7mG2IprGZ+nQCg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-7.2.1.tgz", + "integrity": "sha512-O4ykrXrl2UJNHnhJrCvJxrw1ar+DlUBgyZUeZ8Ci+Ne5Wbq6rBv1gfpQH54/eu3IFbLso0S/kjc6WUGb2HPqZw==", "license": "MIT", "dependencies": { - "@bull-board/api": "7.1.5" + "@bull-board/api": "7.2.1" } }, "node_modules/@cacheable/utils": { diff --git a/package.json b/package.json index 730145781..e81e192e3 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "@angular/platform-browser-dynamic": "21.2.7", "@angular/router": "21.2.7", "@angular/service-worker": "21.2.7", - "@bull-board/api": "7.1.5", - "@bull-board/express": "7.1.5", - "@bull-board/nestjs": "7.1.5", + "@bull-board/api": "7.2.1", + "@bull-board/express": "7.2.1", + "@bull-board/nestjs": "7.2.1", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.6", From 073af0c8c20cfc739e0ca2d74fabbc0e814b8148 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Jun 2026 09:46:56 +0200 Subject: [PATCH 35/42] Task/enable bull dashboard in tab of admin control panel (#7030) * Enable Bull Dashboard in tab * Eliminate BULL_BOARD_IS_READ_ONLY * Update changelog --- CHANGELOG.md | 5 ++ .../configuration/configuration.service.ts | 1 - .../interfaces/environment.interface.ts | 1 - .../data-gathering/data-gathering.module.ts | 3 +- .../portfolio-snapshot.module.ts | 3 +- .../statistics-gathering.module.ts | 3 +- .../admin-jobs/admin-jobs.component.ts | 23 ------- .../app/components/admin-jobs/admin-jobs.html | 9 --- .../app/pages/admin/admin-page.component.ts | 63 ++++++++++++++++--- .../lib/page-tabs/interfaces/interfaces.ts | 9 ++- .../lib/page-tabs/page-tabs.component.html | 49 ++++++++++----- .../src/lib/page-tabs/page-tabs.component.ts | 3 +- 12 files changed, 106 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2141ce5a1..d402bf8f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added support for a click handler in the page tabs component + ### Changed +- Enabled the _Bull Dashboard_ tab in the admin control panel (experimental) - Upgraded `bull-board` from version `7.1.5` to `7.2.1` ## 3.10.0 - 2026-06-13 diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index b19508d3e..5f9d1055d 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -30,7 +30,6 @@ export class ConfigurationService { API_KEY_FINANCIAL_MODELING_PREP: str({ default: '' }), API_KEY_OPEN_FIGI: str({ default: '' }), API_KEY_RAPID_API: str({ default: '' }), - BULL_BOARD_IS_READ_ONLY: bool({ default: true }), CACHE_QUOTES_TTL: num({ default: ms('1 minute') }), CACHE_TTL: num({ default: CACHE_TTL_NO_CACHE }), DATA_SOURCE_EXCHANGE_RATES: str({ default: DataSource.YAHOO }), diff --git a/apps/api/src/services/interfaces/environment.interface.ts b/apps/api/src/services/interfaces/environment.interface.ts index eb3ac86a3..57c58898e 100644 --- a/apps/api/src/services/interfaces/environment.interface.ts +++ b/apps/api/src/services/interfaces/environment.interface.ts @@ -10,7 +10,6 @@ export interface Environment extends CleanedEnvAccessors { API_KEY_FINANCIAL_MODELING_PREP: string; API_KEY_OPEN_FIGI: string; API_KEY_RAPID_API: string; - BULL_BOARD_IS_READ_ONLY: boolean; CACHE_QUOTES_TTL: number; CACHE_TTL: number; DATA_SOURCE_EXCHANGE_RATES: string; diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.module.ts b/apps/api/src/services/queues/data-gathering/data-gathering.module.ts index 5672df5e8..5ac6c40c0 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.module.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.module.ts @@ -23,8 +23,7 @@ import { DataGatheringProcessor } from './data-gathering.processor'; adapter: BullAdapter, name: DATA_GATHERING_QUEUE, options: { - displayName: 'Data Gathering', - readOnlyMode: process.env.BULL_BOARD_IS_READ_ONLY !== 'false' + displayName: 'Data Gathering' } }), BullModule.registerQueue({ diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts index c90f826f6..0da529821 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts @@ -29,8 +29,7 @@ import { PortfolioSnapshotProcessor } from './portfolio-snapshot.processor'; adapter: BullAdapter, name: PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE, options: { - displayName: 'Portfolio Snapshot Computation', - readOnlyMode: process.env.BULL_BOARD_IS_READ_ONLY !== 'false' + displayName: 'Portfolio Snapshot Computation' } }), BullModule.registerQueue({ diff --git a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts index d6f6d5ccd..6ef14e29c 100644 --- a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts +++ b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts @@ -20,8 +20,7 @@ import { StatisticsGatheringService } from './statistics-gathering.service'; adapter: BullAdapter, name: STATISTICS_GATHERING_QUEUE, options: { - displayName: 'Statistics Gathering', - readOnlyMode: process.env.BULL_BOARD_IS_READ_ONLY !== 'false' + displayName: 'Statistics Gathering' } }) ] diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts index b4c228881..fd90bff2c 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts @@ -1,8 +1,5 @@ -import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { - BULL_BOARD_COOKIE_NAME, - BULL_BOARD_ROUTE, DATA_GATHERING_QUEUE_PRIORITY_HIGH, DATA_GATHERING_QUEUE_PRIORITY_LOW, DATA_GATHERING_QUEUE_PRIORITY_MEDIUM, @@ -10,7 +7,6 @@ import { } from '@ghostfolio/common/config'; import { getDateWithTimeFormatString } from '@ghostfolio/common/helper'; import { AdminJobs, User } from '@ghostfolio/common/interfaces'; -import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { AdminService } from '@ghostfolio/ui/services'; @@ -106,7 +102,6 @@ export class GfAdminJobsComponent implements OnInit { 'actions' ]; - protected hasPermissionToAccessBullBoard = false; protected isLoading = false; protected readonly statusFilterOptions = QUEUE_JOB_STATUS_LIST; @@ -116,7 +111,6 @@ export class GfAdminJobsComponent implements OnInit { private readonly changeDetectorRef = inject(ChangeDetectorRef); private readonly destroyRef = inject(DestroyRef); private readonly notificationService = inject(NotificationService); - private readonly tokenStorageService = inject(TokenStorageService); private readonly userService = inject(UserService); public constructor() { @@ -129,11 +123,6 @@ export class GfAdminJobsComponent implements OnInit { this.defaultDateTimeFormat = getDateWithTimeFormatString( this.user.settings.locale ); - - this.hasPermissionToAccessBullBoard = hasPermission( - this.user.permissions, - permissions.accessAdminControlBullBoard - ); } }); @@ -193,18 +182,6 @@ export class GfAdminJobsComponent implements OnInit { }); } - protected onOpenBullBoard() { - const token = this.tokenStorageService.getToken(); - - document.cookie = [ - `${BULL_BOARD_COOKIE_NAME}=${encodeURIComponent(token)}`, - 'path=/', - 'SameSite=Strict' - ].join('; '); - - window.open(BULL_BOARD_ROUTE, '_blank'); - } - protected onViewData(aData: AdminJobs['jobs'][0]['data']) { this.notificationService.alert({ title: JSON.stringify(aData, null, ' ') diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.html b/apps/client/src/app/components/admin-jobs/admin-jobs.html index d57704b86..e615db31b 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.html +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -1,15 +1,6 @@
- @if (hasPermissionToAccessBullBoard) { -
- -
- } -
diff --git a/apps/client/src/app/pages/admin/admin-page.component.ts b/apps/client/src/app/pages/admin/admin-page.component.ts index b933ff058..c5da0fb0c 100644 --- a/apps/client/src/app/pages/admin/admin-page.component.ts +++ b/apps/client/src/app/pages/admin/admin-page.component.ts @@ -1,10 +1,19 @@ +import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; +import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { + BULL_BOARD_COOKIE_NAME, + BULL_BOARD_ROUTE +} from '@ghostfolio/common/config'; +import { User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { GfPageTabsComponent, TabConfiguration } from '@ghostfolio/ui/page-tabs'; -import { Component, OnInit } from '@angular/core'; +import { Component, inject } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { addIcons } from 'ionicons'; import { flashOutline, @@ -21,10 +30,23 @@ import { styleUrls: ['./admin-page.scss'], templateUrl: './admin-page.html' }) -export class AdminPageComponent implements OnInit { +export class AdminPageComponent { public tabs: TabConfiguration[] = []; + private user: User; + + private readonly tokenStorageService = inject(TokenStorageService); + private readonly userService = inject(UserService); + public constructor() { + this.userService.stateChanged + .pipe(takeUntilDestroyed()) + .subscribe((state) => { + this.user = state?.user; + + this.initializeTabs(); + }); + addIcons({ flashOutline, peopleOutline, @@ -34,7 +56,12 @@ export class AdminPageComponent implements OnInit { }); } - public ngOnInit() { + private initializeTabs() { + const hasPermissionToAccessBullBoard = hasPermission( + this.user?.permissions, + permissions.accessAdminControlBullBoard + ); + this.tabs = [ { iconName: 'reader-outline', @@ -51,11 +78,19 @@ export class AdminPageComponent implements OnInit { label: internalRoutes.adminControl.subRoutes.marketData.title, routerLink: internalRoutes.adminControl.subRoutes.marketData.routerLink }, - { - iconName: 'flash-outline', - label: internalRoutes.adminControl.subRoutes.jobs.title, - routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink - }, + hasPermissionToAccessBullBoard + ? { + iconName: 'flash-outline', + label: $localize`Job Queue`, + onClick: () => { + this.onOpenBullBoard(); + } + } + : { + iconName: 'flash-outline', + label: internalRoutes.adminControl.subRoutes.jobs.title, + routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink + }, { iconName: 'people-outline', label: internalRoutes.adminControl.subRoutes.users.title, @@ -63,4 +98,16 @@ export class AdminPageComponent implements OnInit { } ]; } + + private onOpenBullBoard() { + const token = this.tokenStorageService.getToken(); + + document.cookie = [ + `${BULL_BOARD_COOKIE_NAME}=${encodeURIComponent(token)}`, + 'path=/', + 'SameSite=Strict' + ].join('; '); + + window.open(BULL_BOARD_ROUTE, '_blank'); + } } diff --git a/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts b/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts index 7b18b26ec..3d44d2870 100644 --- a/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts +++ b/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts @@ -1,6 +1,11 @@ -export interface TabConfiguration { +interface BaseTabConfiguration { iconName: string; label: string; - routerLink: string[]; showCondition?: boolean; } + +export type TabConfiguration = BaseTabConfiguration & + ( + | { onClick: () => void; routerLink?: never } + | { onClick?: never; routerLink: string[] } + ); diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.html b/libs/ui/src/lib/page-tabs/page-tabs.component.html index fa9af9b11..28843148a 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.html +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.html @@ -10,21 +10,40 @@ > @for (tab of tabs(); track tab) { @if (tab.showCondition !== false) { - - -
-
+ @if (tab.onClick) { + + } @else { + + + + } } } + + + +
+
diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.ts b/libs/ui/src/lib/page-tabs/page-tabs.component.ts index 61c2caf05..a6ab9cb18 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.ts +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.ts @@ -1,3 +1,4 @@ +import { NgTemplateOutlet } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -13,7 +14,7 @@ import { TabConfiguration } from './interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [IonIcon, MatTabsModule, RouterModule], + imports: [IonIcon, MatTabsModule, NgTemplateOutlet, RouterModule], selector: 'gf-page-tabs', styleUrls: ['./page-tabs.component.scss'], templateUrl: './page-tabs.component.html' From b55394b2dc1dc28bf7d83718e218759b35cce0bc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Jun 2026 10:38:47 +0200 Subject: [PATCH 36/42] Task/improve styling of page tabs component on desktop (#7032) * Improve styling * Update changelog --- CHANGELOG.md | 1 + .../lib/page-tabs/page-tabs.component.html | 6 +-- .../lib/page-tabs/page-tabs.component.scss | 43 +++++++++++++++++-- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d402bf8f5..95770cad9 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 +- Improved the styling of the page tabs component on desktop - Enabled the _Bull Dashboard_ tab in the admin control panel (experimental) - Upgraded `bull-board` from version `7.1.5` to `7.2.1` diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.html b/libs/ui/src/lib/page-tabs/page-tabs.component.html index 28843148a..051005790 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.html +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.html @@ -12,7 +12,7 @@ @if (tab.showCondition !== false) { @if (tab.onClick) { - -
+
+ + +
+ From 5224e6a335deac1265c3a400f54eb2c92203bbac Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:08:00 +0200 Subject: [PATCH 41/42] Bugfix/improve loading state when customizing rule thresholds on X-ray page (#7039) * Improve loading state * Update changelog --- CHANGELOG.md | 4 ++++ apps/client/src/app/components/rules/rules.component.html | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 632ad7330..5f1fa380c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `bull-board` from version `7.1.5` to `7.2.1` - Upgraded `date-fns` from version `4.1.0` to `4.4.0` +### Fixed + +- Improved the loading state when customizing the rule thresholds on the _X-ray_ page + ## 3.10.0 - 2026-06-13 ### Changed diff --git a/apps/client/src/app/components/rules/rules.component.html b/apps/client/src/app/components/rules/rules.component.html index 0c3153c52..97b41e61b 100644 --- a/apps/client/src/app/components/rules/rules.component.html +++ b/apps/client/src/app/components/rules/rules.component.html @@ -3,9 +3,7 @@
@if (isLoading) { - } - - @if (rules !== null && rules !== undefined) { + } @else if (rules) { @for (rule of rules; track rule.key) { Date: Sun, 14 Jun 2026 19:11:24 +0200 Subject: [PATCH 42/42] Release 3.11.0 (#7040) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f1fa380c..4f023da8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 3.11.0 - 2026-06-14 ### Added diff --git a/package-lock.json b/package-lock.json index 8c4708aa6..9a1d96138 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.10.0", + "version": "3.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.10.0", + "version": "3.11.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a7659e007..56d673d40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.10.0", + "version": "3.11.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio",