Browse Source

Merge branch 'ghostfolio:main' into patch-1

pull/4402/head
Chang-Yen Tseng 4 weeks ago
committed by GitHub
parent
commit
288fda1b06
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 49
      CHANGELOG.md
  2. 9
      DEVELOPMENT.md
  3. 20
      apps/api/src/app/account/account.service.ts
  4. 28
      apps/api/src/app/admin/admin.service.ts
  5. 33
      apps/api/src/app/auth/web-auth.service.ts
  6. 11
      apps/api/src/app/endpoints/ai/ai.controller.ts
  7. 7
      apps/api/src/app/endpoints/ai/ai.service.ts
  8. 36
      apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
  9. 43
      apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
  10. 5
      apps/api/src/app/export/export.service.ts
  11. 10
      apps/api/src/app/import/create-account-with-balances.dto.ts
  12. 7
      apps/api/src/app/import/import-data.dto.ts
  13. 2
      apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts
  14. 25
      apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts
  15. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts
  16. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts
  17. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts
  18. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts
  19. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts
  20. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts
  21. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts
  22. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts
  23. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts
  24. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts
  25. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts
  26. 2
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts
  27. 0
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.spec.ts
  28. 969
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts
  29. 959
      apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
  30. 10
      apps/api/src/app/portfolio/portfolio.service.ts
  31. 684
      apps/api/src/assets/cryptocurrencies/cryptocurrencies.json
  32. 2
      apps/api/src/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor.ts
  33. 35
      apps/api/src/main.ts
  34. 2
      apps/api/src/middlewares/html-template.middleware.ts
  35. 5
      apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts
  36. 5
      apps/api/src/services/data-provider/coingecko/coingecko.service.ts
  37. 2
      apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts
  38. 5
      apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts
  39. 63
      apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
  40. 68
      apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts
  41. 5
      apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts
  42. 10
      apps/api/src/services/data-provider/interfaces/data-provider.interface.ts
  43. 5
      apps/api/src/services/data-provider/manual/manual.service.ts
  44. 5
      apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts
  45. 5
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts
  46. 2
      apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts
  47. 34
      apps/client/localhost.cert
  48. 52
      apps/client/localhost.pem
  49. 44
      apps/client/src/app/components/admin-overview/admin-overview.component.ts
  50. 67
      apps/client/src/app/components/admin-overview/admin-overview.html
  51. 2
      apps/client/src/app/components/header/header.component.html
  52. 4
      apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
  53. 2
      apps/client/src/app/components/rule/rule.component.scss
  54. 4
      apps/client/src/app/pages/api/api-page.component.ts
  55. 5
      apps/client/src/app/pages/portfolio/activities/activities-page.html
  56. 33
      apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
  57. 72
      apps/client/src/app/pages/portfolio/analysis/analysis-page.html
  58. 2
      apps/client/src/app/pages/portfolio/analysis/analysis-page.module.ts
  59. 63
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
  60. 14
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.scss
  61. 32
      apps/client/src/app/pages/register/register-page.component.ts
  62. 2
      apps/client/src/app/pages/register/register-page.html
  63. 57
      apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
  64. 125
      apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
  65. 4
      apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.module.ts
  66. 4
      apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.scss
  67. 11
      apps/client/src/app/services/data.service.ts
  68. 6
      apps/client/src/app/services/web-authn.service.ts
  69. 292
      apps/client/src/locales/messages.ca.xlf
  70. 292
      apps/client/src/locales/messages.de.xlf
  71. 292
      apps/client/src/locales/messages.es.xlf
  72. 292
      apps/client/src/locales/messages.fr.xlf
  73. 292
      apps/client/src/locales/messages.it.xlf
  74. 292
      apps/client/src/locales/messages.nl.xlf
  75. 292
      apps/client/src/locales/messages.pl.xlf
  76. 292
      apps/client/src/locales/messages.pt.xlf
  77. 292
      apps/client/src/locales/messages.tr.xlf
  78. 292
      apps/client/src/locales/messages.uk.xlf
  79. 277
      apps/client/src/locales/messages.xlf
  80. 292
      apps/client/src/locales/messages.zh.xlf
  81. 2
      apps/client/src/styles.scss
  82. 2
      libs/common/src/lib/config.ts
  83. 4
      libs/common/src/lib/interfaces/account-balance.interface.ts
  84. 7
      libs/common/src/lib/interfaces/admin-data.interface.ts
  85. 6
      libs/common/src/lib/interfaces/export.interface.ts
  86. 4
      libs/common/src/lib/interfaces/index.ts
  87. 4
      libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts
  88. 57
      libs/common/src/lib/personal-finance-tools.ts
  89. 1
      libs/common/src/lib/types/ai-prompt-mode.type.ts
  90. 2
      libs/common/src/lib/types/index.ts
  91. 5
      libs/ui/src/lib/activities-table/activities-table.component.html
  92. 1
      libs/ui/src/lib/activities-table/activities-table.component.ts
  93. 7
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts
  94. 3
      libs/ui/src/lib/i18n.ts
  95. 26820
      package-lock.json
  96. 85
      package.json

49
CHANGELOG.md

@ -7,8 +7,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Changed
- Improved the symbol validation in the _Yahoo Finance_ service (get asset profiles)
- Refreshed the cryptocurrencies list
### Fixed
- Fixed an issue in the activities import functionality related to the account balances
## 2.146.0 - 2025-03-15
### Changed
- Improved the usability of the user account registration
- Improved the usability of the _Copy AI prompt to clipboard_ actions on the analysis page (experimental)
- Formatted the name in the _Financial Modeling Prep_ service
- Removed the exchange rates from the overview of the admin control panel
- Improved the language localization for German (`de`)
- Upgraded `angular` from version `19.0.5` to `19.2.1`
- Upgraded `Nx` from version `20.3.2` to `20.5.0`
- Upgraded `prettier` from version `3.5.1` to `3.5.3`
- Upgraded `prisma` from version `6.4.1` to `6.5.0`
### Fixed
- Fixed an issue with serving _Storybook_ related to the `contentSecurityPolicy`
## 2.145.1 - 2025-03-10
### Added
- Extended the export functionality by the account balances
- Added a _Copy portfolio data to clipboard for AI prompt_ action to the analysis page (experimental)
### Changed
- Improved the style of the summary on the _X-ray_ page
- Improved the language localization for German (`de`)
- Upgraded `@simplewebauthn/browser` and `@simplewebauthn/server` from version `9.0` to `13.1`
### Fixed
- Fixed an issue to get dividends in the _Financial Modeling Prep_ service
- Fixed an issue to get historical market data in the _Financial Modeling Prep_ service
- Fixed an issue with serving _Storybook_
## 2.144.0 - 2025-03-06
### Fixed
- Fixed the missing import functionality on the non-empty activities page
- Fixed the functionality to delete an asset profile of a custom currency in the admin control panel
## 2.143.0 - 2025-03-02

9
DEVELOPMENT.md

@ -101,3 +101,12 @@ https://www.prisma.io/docs/concepts/components/prisma-migrate/db-push
Run `npm run prisma migrate dev --name added_job_title`
https://www.prisma.io/docs/concepts/components/prisma-migrate#getting-started-with-prisma-migrate
## SSL
Generate `localhost.cert` and `localhost.pem` files.
```
openssl req -x509 -newkey rsa:2048 -nodes -keyout apps/client/localhost.pem -out apps/client/localhost.cert -days 365 \
-subj "/C=CH/ST=State/L=City/O=Organization/OU=Unit/CN=localhost"
```

20
apps/api/src/app/account/account.service.ts

@ -7,7 +7,13 @@ import { Filter } from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { Account, Order, Platform, Prisma } from '@prisma/client';
import {
Account,
AccountBalance,
Order,
Platform,
Prisma
} from '@prisma/client';
import { Big } from 'big.js';
import { format } from 'date-fns';
import { groupBy } from 'lodash';
@ -56,13 +62,19 @@ export class AccountService {
orderBy?: Prisma.AccountOrderByWithRelationInput;
}): Promise<
(Account & {
balances?: AccountBalance[];
Order?: Order[];
Platform?: Platform;
})[]
> {
const { include = {}, skip, take, cursor, where, orderBy } = params;
include.balances = { orderBy: { date: 'desc' }, take: 1 };
const isBalancesIncluded = !!include.balances;
include.balances = {
orderBy: { date: 'desc' },
...(isBalancesIncluded ? {} : { take: 1 })
};
const accounts = await this.prismaService.account.findMany({
cursor,
@ -76,7 +88,9 @@ export class AccountService {
return accounts.map((account) => {
account = { ...account, balance: account.balances[0]?.value ?? 0 };
delete account.balances;
if (!isBalancesIncluded) {
delete account.balances;
}
return account;
});

28
apps/api/src/app/admin/admin.service.ts

@ -10,7 +10,6 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import {
DEFAULT_CURRENCY,
PROPERTY_CURRENCIES,
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED
@ -37,7 +36,6 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common';
import {
AssetClass,
AssetSubClass,
DataSource,
Prisma,
PrismaClient,
Property,
@ -132,31 +130,6 @@ export class AdminService {
}
public async get(): Promise<AdminData> {
const exchangeRates = this.exchangeRateDataService
.getCurrencies()
.filter((currency) => {
return currency !== DEFAULT_CURRENCY;
})
.map((currency) => {
const label1 = DEFAULT_CURRENCY;
const label2 = currency;
return {
label1,
label2,
dataSource:
DataSource[
this.configurationService.get('DATA_SOURCE_EXCHANGE_RATES')
],
symbol: `${label1}${label2}`,
value: this.exchangeRateDataService.toCurrency(
1,
DEFAULT_CURRENCY,
currency
)
};
});
const [settings, transactionCount, userCount] = await Promise.all([
this.propertyService.get(),
this.prismaService.order.count(),
@ -164,7 +137,6 @@ export class AdminService {
]);
return {
exchangeRates,
settings,
transactionCount,
userCount,

33
apps/api/src/app/auth/web-auth.service.ts

@ -24,6 +24,7 @@ import {
verifyRegistrationResponse,
VerifyRegistrationResponseOpts
} from '@simplewebauthn/server';
import { isoBase64URL, isoUint8Array } from '@simplewebauthn/server/helpers';
import {
AssertionCredentialJSON,
@ -54,10 +55,9 @@ export class WebAuthService {
const opts: GenerateRegistrationOptionsOpts = {
rpName: 'Ghostfolio',
rpID: this.rpID,
userID: user.id,
userID: isoUint8Array.fromUTF8String(user.id),
userName: '',
timeout: 60000,
attestationType: 'indirect',
authenticatorSelection: {
authenticatorAttachment: 'platform',
requireResidentKey: false,
@ -111,11 +111,17 @@ export class WebAuthService {
where: { userId: user.id }
});
if (registrationInfo && verified) {
const { counter, credentialID, credentialPublicKey } = registrationInfo;
const {
credential: {
counter,
id: credentialId,
publicKey: credentialPublicKey
}
} = registrationInfo;
let existingDevice = devices.find(
(device) => device.credentialId === credentialID
);
let existingDevice = devices.find((device) => {
return isoBase64URL.fromBuffer(device.credentialId) === credentialId;
});
if (!existingDevice) {
/**
@ -123,7 +129,7 @@ export class WebAuthService {
*/
existingDevice = await this.deviceService.createAuthDevice({
counter,
credentialId: Buffer.from(credentialID),
credentialId: Buffer.from(credentialId),
credentialPublicKey: Buffer.from(credentialPublicKey),
User: { connect: { id: user.id } }
});
@ -148,9 +154,8 @@ export class WebAuthService {
const opts: GenerateAuthenticationOptionsOpts = {
allowCredentials: [
{
id: device.credentialId,
transports: ['internal'],
type: 'public-key'
id: isoBase64URL.fromBuffer(device.credentialId),
transports: ['internal']
}
],
rpID: this.rpID,
@ -187,10 +192,10 @@ export class WebAuthService {
let verification: VerifiedAuthenticationResponse;
try {
const opts: VerifyAuthenticationResponseOpts = {
authenticator: {
credentialID: device.credentialId,
credentialPublicKey: device.credentialPublicKey,
counter: device.counter
credential: {
counter: device.counter,
id: isoBase64URL.fromBuffer(device.credentialId),
publicKey: device.credentialPublicKey
},
expectedChallenge: `${user.authChallenge}`,
expectedOrigin: this.expectedOrigin,

11
apps/api/src/app/endpoints/ai/ai.controller.ts

@ -6,9 +6,9 @@ import {
} from '@ghostfolio/common/config';
import { AiPromptResponse } from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions';
import type { RequestWithUser } from '@ghostfolio/common/types';
import type { AiPromptMode, RequestWithUser } from '@ghostfolio/common/types';
import { Controller, Get, Inject, UseGuards } from '@nestjs/common';
import { Controller, Get, Inject, Param, UseGuards } from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
@ -21,11 +21,14 @@ export class AiController {
@Inject(REQUEST) private readonly request: RequestWithUser
) {}
@Get('prompt')
@Get('prompt/:mode')
@HasPermission(permissions.readAiPrompt)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getPrompt(): Promise<AiPromptResponse> {
public async getPrompt(
@Param('mode') mode: AiPromptMode
): Promise<AiPromptResponse> {
const prompt = await this.aiService.getPrompt({
mode,
impersonationId: undefined,
languageCode:
this.request.user.Settings.settings.language ?? DEFAULT_LANGUAGE_CODE,

7
apps/api/src/app/endpoints/ai/ai.service.ts

@ -1,4 +1,5 @@
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
import type { AiPromptMode } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
@ -9,11 +10,13 @@ export class AiService {
public async getPrompt({
impersonationId,
languageCode,
mode,
userCurrency,
userId
}: {
impersonationId: string;
languageCode: string;
mode: AiPromptMode;
userCurrency: string;
userId: string;
}) {
@ -43,6 +46,10 @@ export class AiService {
)
];
if (mode === 'portfolio') {
return holdingsTable.join('\n');
}
return [
`You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`,
...holdingsTable,

36
apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts

@ -2,6 +2,7 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorat
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import { parseDate } from '@ghostfolio/common/helper';
import {
DataProviderGhostfolioAssetProfileResponse,
DataProviderGhostfolioStatusResponse,
DividendsResponse,
HistoricalResponse,
@ -37,6 +38,41 @@ export class GhostfolioController {
@Inject(REQUEST) private readonly request: RequestWithUser
) {}
@Get('asset-profile/:symbol')
@HasPermission(permissions.enableDataProviderGhostfolio)
@UseGuards(AuthGuard('api-key'), HasPermissionGuard)
public async getAssetProfile(
@Param('symbol') symbol: string
): Promise<DataProviderGhostfolioAssetProfileResponse> {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
StatusCodes.TOO_MANY_REQUESTS
);
}
try {
const assetProfile = await this.ghostfolioService.getAssetProfile({
symbol
});
await this.ghostfolioService.incrementDailyRequests({
userId: this.request.user.id
});
return assetProfile;
} catch {
throw new HttpException(
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
StatusCodes.INTERNAL_SERVER_ERROR
);
}
}
/**
* @deprecated
*/

43
apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import {
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -15,6 +16,7 @@ import {
} from '@ghostfolio/common/config';
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config';
import {
DataProviderGhostfolioAssetProfileResponse,
DataProviderInfo,
DividendsResponse,
HistoricalResponse,
@ -25,7 +27,7 @@ import {
import { UserWithSettings } from '@ghostfolio/common/types';
import { Injectable, Logger } from '@nestjs/common';
import { DataSource } from '@prisma/client';
import { DataSource, SymbolProfile } from '@prisma/client';
import { Big } from 'big.js';
@Injectable()
@ -37,6 +39,44 @@ export class GhostfolioService {
private readonly propertyService: PropertyService
) {}
public async getAssetProfile({
requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
symbol
}: GetAssetProfileParams) {
let result: DataProviderGhostfolioAssetProfileResponse = {};
try {
const promises: Promise<Partial<SymbolProfile>>[] = [];
for (const dataProviderService of this.getDataProviderServices()) {
promises.push(
dataProviderService
.getAssetProfile({
requestTimeout,
symbol
})
.then((assetProfile) => {
result = {
...result,
...assetProfile,
dataSource: DataSource.GHOSTFOLIO
};
return assetProfile;
})
);
}
await Promise.all(promises);
return result;
} catch (error) {
Logger.error(error, 'GhostfolioService');
throw error;
}
}
public async getDividends({
from,
granularity,
@ -277,6 +317,7 @@ export class GhostfolioService {
});
results.items = filteredItems;
return results;
} catch (error) {
Logger.error(error, 'GhostfolioService');

5
apps/api/src/app/export/export.service.ts

@ -31,6 +31,7 @@ export class ExportService {
const accounts = (
await this.accountService.accounts({
include: {
balances: true,
Platform: true
},
orderBy: {
@ -41,6 +42,7 @@ export class ExportService {
).map(
({
balance,
balances,
comment,
currency,
id,
@ -55,6 +57,9 @@ export class ExportService {
return {
balance,
balances: balances.map(({ date, value }) => {
return { date: date.toISOString(), value };
}),
comment,
currency,
id,

10
apps/api/src/app/import/create-account-with-balances.dto.ts

@ -0,0 +1,10 @@
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { AccountBalance } from '@ghostfolio/common/interfaces';
import { IsArray, IsOptional } from 'class-validator';
export class CreateAccountWithBalancesDto extends CreateAccountDto {
@IsArray()
@IsOptional()
balances?: AccountBalance;
}

7
apps/api/src/app/import/import-data.dto.ts

@ -1,15 +1,16 @@
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Type } from 'class-transformer';
import { IsArray, IsOptional, ValidateNested } from 'class-validator';
import { CreateAccountWithBalancesDto } from './create-account-with-balances.dto';
export class ImportDataDto {
@IsOptional()
@IsArray()
@Type(() => CreateAccountDto)
@Type(() => CreateAccountWithBalancesDto)
@ValidateNested({ each: true })
accounts: CreateAccountDto[];
accounts: CreateAccountWithBalancesDto[];
@IsArray()
@Type(() => CreateOrderDto)

2
apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts

@ -5,7 +5,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { PortfolioSnapshot } from '@ghostfolio/common/models';
export class MWRPortfolioCalculator extends PortfolioCalculator {
export class MwrPortfolioCalculator extends PortfolioCalculator {
protected calculateOverallPerformance(): PortfolioSnapshot {
throw new Error('Method not implemented.');
}

25
apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts

@ -8,12 +8,14 @@ import { Filter, HistoricalDataItem } from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common';
import { MWRPortfolioCalculator } from './mwr/portfolio-calculator';
import { MwrPortfolioCalculator } from './mwr/portfolio-calculator';
import { PortfolioCalculator } from './portfolio-calculator';
import { TWRPortfolioCalculator } from './twr/portfolio-calculator';
import { RoaiPortfolioCalculator } from './roai/portfolio-calculator';
import { TwrPortfolioCalculator } from './twr/portfolio-calculator';
export enum PerformanceCalculationType {
MWR = 'MWR', // Money-Weighted Rate of Return
ROAI = 'ROAI', // Return on Average Investment
TWR = 'TWR' // Time-Weighted Rate of Return
}
@ -44,7 +46,7 @@ export class PortfolioCalculatorFactory {
}): PortfolioCalculator {
switch (calculationType) {
case PerformanceCalculationType.MWR:
return new MWRPortfolioCalculator({
return new MwrPortfolioCalculator({
accountBalanceItems,
activities,
currency,
@ -56,15 +58,28 @@ export class PortfolioCalculatorFactory {
portfolioSnapshotService: this.portfolioSnapshotService,
redisCacheService: this.redisCacheService
});
case PerformanceCalculationType.TWR:
return new TWRPortfolioCalculator({
case PerformanceCalculationType.ROAI:
return new RoaiPortfolioCalculator({
accountBalanceItems,
activities,
currency,
filters,
userId,
configurationService: this.configurationService,
currentRateService: this.currentRateService,
exchangeRateDataService: this.exchangeRateDataService,
portfolioSnapshotService: this.portfolioSnapshotService,
redisCacheService: this.redisCacheService
});
case PerformanceCalculationType.TWR:
return new TwrPortfolioCalculator({
accountBalanceItems,
activities,
currency,
filters,
userId,
configurationService: this.configurationService,
currentRateService: this.currentRateService,
exchangeRateDataService: this.exchangeRateDataService,
portfolioSnapshotService: this.portfolioSnapshotService,
redisCacheService: this.redisCacheService

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts

@ -137,7 +137,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts

@ -122,7 +122,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts

@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts

@ -136,7 +136,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-fee.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts

@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'USD',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts

@ -120,7 +120,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-item.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts

@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'USD',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-liability.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts

@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'USD',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-msft-buy-with-dividend.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts

@ -135,7 +135,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'USD',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-no-orders.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts

@ -84,7 +84,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities: [],
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts

@ -116,7 +116,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

2
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts

@ -116,7 +116,7 @@ describe('PortfolioCalculator', () => {
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});

0
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.spec.ts → apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.spec.ts

969
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts

@ -0,0 +1,969 @@
import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator';
import { PortfolioOrderItem } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-order-item.interface';
import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
AssetProfileIdentifier,
SymbolMetrics
} from '@ghostfolio/common/interfaces';
import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models';
import { DateRange } from '@ghostfolio/common/types';
import { Logger } from '@nestjs/common';
import { Big } from 'big.js';
import { addMilliseconds, differenceInDays, format, isBefore } from 'date-fns';
import { cloneDeep, sortBy } from 'lodash';
export class RoaiPortfolioCalculator extends PortfolioCalculator {
private chartDates: string[];
protected calculateOverallPerformance(
positions: TimelinePosition[]
): PortfolioSnapshot {
let currentValueInBaseCurrency = new Big(0);
let grossPerformance = new Big(0);
let grossPerformanceWithCurrencyEffect = new Big(0);
let hasErrors = false;
let netPerformance = new Big(0);
let totalFeesWithCurrencyEffect = new Big(0);
const totalInterestWithCurrencyEffect = new Big(0);
let totalInvestment = new Big(0);
let totalInvestmentWithCurrencyEffect = new Big(0);
let totalTimeWeightedInvestment = new Big(0);
let totalTimeWeightedInvestmentWithCurrencyEffect = new Big(0);
for (const currentPosition of positions) {
if (currentPosition.feeInBaseCurrency) {
totalFeesWithCurrencyEffect = totalFeesWithCurrencyEffect.plus(
currentPosition.feeInBaseCurrency
);
}
if (currentPosition.valueInBaseCurrency) {
currentValueInBaseCurrency = currentValueInBaseCurrency.plus(
currentPosition.valueInBaseCurrency
);
} else {
hasErrors = true;
}
if (currentPosition.investment) {
totalInvestment = totalInvestment.plus(currentPosition.investment);
totalInvestmentWithCurrencyEffect =
totalInvestmentWithCurrencyEffect.plus(
currentPosition.investmentWithCurrencyEffect
);
} else {
hasErrors = true;
}
if (currentPosition.grossPerformance) {
grossPerformance = grossPerformance.plus(
currentPosition.grossPerformance
);
grossPerformanceWithCurrencyEffect =
grossPerformanceWithCurrencyEffect.plus(
currentPosition.grossPerformanceWithCurrencyEffect
);
netPerformance = netPerformance.plus(currentPosition.netPerformance);
} else if (!currentPosition.quantity.eq(0)) {
hasErrors = true;
}
if (currentPosition.timeWeightedInvestment) {
totalTimeWeightedInvestment = totalTimeWeightedInvestment.plus(
currentPosition.timeWeightedInvestment
);
totalTimeWeightedInvestmentWithCurrencyEffect =
totalTimeWeightedInvestmentWithCurrencyEffect.plus(
currentPosition.timeWeightedInvestmentWithCurrencyEffect
);
} else if (!currentPosition.quantity.eq(0)) {
Logger.warn(
`Missing historical market data for ${currentPosition.symbol} (${currentPosition.dataSource})`,
'PortfolioCalculator'
);
hasErrors = true;
}
}
return {
currentValueInBaseCurrency,
hasErrors,
positions,
totalFeesWithCurrencyEffect,
totalInterestWithCurrencyEffect,
totalInvestment,
totalInvestmentWithCurrencyEffect,
activitiesCount: this.activities.filter(({ type }) => {
return ['BUY', 'SELL'].includes(type);
}).length,
createdAt: new Date(),
errors: [],
historicalData: [],
totalLiabilitiesWithCurrencyEffect: new Big(0),
totalValuablesWithCurrencyEffect: new Big(0)
};
}
protected getSymbolMetrics({
chartDateMap,
dataSource,
end,
exchangeRates,
marketSymbolMap,
start,
symbol
}: {
chartDateMap?: { [date: string]: boolean };
end: Date;
exchangeRates: { [dateString: string]: number };
marketSymbolMap: {
[date: string]: { [symbol: string]: Big };
};
start: Date;
} & AssetProfileIdentifier): SymbolMetrics {
const currentExchangeRate = exchangeRates[format(new Date(), DATE_FORMAT)];
const currentValues: { [date: string]: Big } = {};
const currentValuesWithCurrencyEffect: { [date: string]: Big } = {};
let fees = new Big(0);
let feesAtStartDate = new Big(0);
let feesAtStartDateWithCurrencyEffect = new Big(0);
let feesWithCurrencyEffect = new Big(0);
let grossPerformance = new Big(0);
let grossPerformanceWithCurrencyEffect = new Big(0);
let grossPerformanceAtStartDate = new Big(0);
let grossPerformanceAtStartDateWithCurrencyEffect = new Big(0);
let grossPerformanceFromSells = new Big(0);
let grossPerformanceFromSellsWithCurrencyEffect = new Big(0);
let initialValue: Big;
let initialValueWithCurrencyEffect: Big;
let investmentAtStartDate: Big;
let investmentAtStartDateWithCurrencyEffect: Big;
const investmentValuesAccumulated: { [date: string]: Big } = {};
const investmentValuesAccumulatedWithCurrencyEffect: {
[date: string]: Big;
} = {};
const investmentValuesWithCurrencyEffect: { [date: string]: Big } = {};
let lastAveragePrice = new Big(0);
let lastAveragePriceWithCurrencyEffect = new Big(0);
const netPerformanceValues: { [date: string]: Big } = {};
const netPerformanceValuesWithCurrencyEffect: { [date: string]: Big } = {};
const timeWeightedInvestmentValues: { [date: string]: Big } = {};
const timeWeightedInvestmentValuesWithCurrencyEffect: {
[date: string]: Big;
} = {};
const totalAccountBalanceInBaseCurrency = new Big(0);
let totalDividend = new Big(0);
let totalDividendInBaseCurrency = new Big(0);
let totalInterest = new Big(0);
let totalInterestInBaseCurrency = new Big(0);
let totalInvestment = new Big(0);
let totalInvestmentFromBuyTransactions = new Big(0);
let totalInvestmentFromBuyTransactionsWithCurrencyEffect = new Big(0);
let totalInvestmentWithCurrencyEffect = new Big(0);
let totalLiabilities = new Big(0);
let totalLiabilitiesInBaseCurrency = new Big(0);
let totalQuantityFromBuyTransactions = new Big(0);
let totalUnits = new Big(0);
let totalValuables = new Big(0);
let totalValuablesInBaseCurrency = new Big(0);
let valueAtStartDate: Big;
let valueAtStartDateWithCurrencyEffect: Big;
// Clone orders to keep the original values in this.orders
let orders: PortfolioOrderItem[] = cloneDeep(
this.activities.filter(({ SymbolProfile }) => {
return SymbolProfile.symbol === symbol;
})
);
if (orders.length <= 0) {
return {
currentValues: {},
currentValuesWithCurrencyEffect: {},
feesWithCurrencyEffect: new Big(0),
grossPerformance: new Big(0),
grossPerformancePercentage: new Big(0),
grossPerformancePercentageWithCurrencyEffect: new Big(0),
grossPerformanceWithCurrencyEffect: new Big(0),
hasErrors: false,
initialValue: new Big(0),
initialValueWithCurrencyEffect: new Big(0),
investmentValuesAccumulated: {},
investmentValuesAccumulatedWithCurrencyEffect: {},
investmentValuesWithCurrencyEffect: {},
netPerformance: new Big(0),
netPerformancePercentage: new Big(0),
netPerformancePercentageWithCurrencyEffectMap: {},
netPerformanceValues: {},
netPerformanceValuesWithCurrencyEffect: {},
netPerformanceWithCurrencyEffectMap: {},
timeWeightedInvestment: new Big(0),
timeWeightedInvestmentValues: {},
timeWeightedInvestmentValuesWithCurrencyEffect: {},
timeWeightedInvestmentWithCurrencyEffect: new Big(0),
totalAccountBalanceInBaseCurrency: new Big(0),
totalDividend: new Big(0),
totalDividendInBaseCurrency: new Big(0),
totalInterest: new Big(0),
totalInterestInBaseCurrency: new Big(0),
totalInvestment: new Big(0),
totalInvestmentWithCurrencyEffect: new Big(0),
totalLiabilities: new Big(0),
totalLiabilitiesInBaseCurrency: new Big(0),
totalValuables: new Big(0),
totalValuablesInBaseCurrency: new Big(0)
};
}
const dateOfFirstTransaction = new Date(orders[0].date);
const endDateString = format(end, DATE_FORMAT);
const startDateString = format(start, DATE_FORMAT);
const unitPriceAtStartDate = marketSymbolMap[startDateString]?.[symbol];
const unitPriceAtEndDate = marketSymbolMap[endDateString]?.[symbol];
if (
!unitPriceAtEndDate ||
(!unitPriceAtStartDate && isBefore(dateOfFirstTransaction, start))
) {
return {
currentValues: {},
currentValuesWithCurrencyEffect: {},
feesWithCurrencyEffect: new Big(0),
grossPerformance: new Big(0),
grossPerformancePercentage: new Big(0),
grossPerformancePercentageWithCurrencyEffect: new Big(0),
grossPerformanceWithCurrencyEffect: new Big(0),
hasErrors: true,
initialValue: new Big(0),
initialValueWithCurrencyEffect: new Big(0),
investmentValuesAccumulated: {},
investmentValuesAccumulatedWithCurrencyEffect: {},
investmentValuesWithCurrencyEffect: {},
netPerformance: new Big(0),
netPerformancePercentage: new Big(0),
netPerformancePercentageWithCurrencyEffectMap: {},
netPerformanceWithCurrencyEffectMap: {},
netPerformanceValues: {},
netPerformanceValuesWithCurrencyEffect: {},
timeWeightedInvestment: new Big(0),
timeWeightedInvestmentValues: {},
timeWeightedInvestmentValuesWithCurrencyEffect: {},
timeWeightedInvestmentWithCurrencyEffect: new Big(0),
totalAccountBalanceInBaseCurrency: new Big(0),
totalDividend: new Big(0),
totalDividendInBaseCurrency: new Big(0),
totalInterest: new Big(0),
totalInterestInBaseCurrency: new Big(0),
totalInvestment: new Big(0),
totalInvestmentWithCurrencyEffect: new Big(0),
totalLiabilities: new Big(0),
totalLiabilitiesInBaseCurrency: new Big(0),
totalValuables: new Big(0),
totalValuablesInBaseCurrency: new Big(0)
};
}
// Add a synthetic order at the start and the end date
orders.push({
date: startDateString,
fee: new Big(0),
feeInBaseCurrency: new Big(0),
itemType: 'start',
quantity: new Big(0),
SymbolProfile: {
dataSource,
symbol
},
type: 'BUY',
unitPrice: unitPriceAtStartDate
});
orders.push({
date: endDateString,
fee: new Big(0),
feeInBaseCurrency: new Big(0),
itemType: 'end',
SymbolProfile: {
dataSource,
symbol
},
quantity: new Big(0),
type: 'BUY',
unitPrice: unitPriceAtEndDate
});
let lastUnitPrice: Big;
const ordersByDate: { [date: string]: PortfolioOrderItem[] } = {};
for (const order of orders) {
ordersByDate[order.date] = ordersByDate[order.date] ?? [];
ordersByDate[order.date].push(order);
}
if (!this.chartDates) {
this.chartDates = Object.keys(chartDateMap).sort();
}
for (const dateString of this.chartDates) {
if (dateString < startDateString) {
continue;
} else if (dateString > endDateString) {
break;
}
if (ordersByDate[dateString]?.length > 0) {
for (const order of ordersByDate[dateString]) {
order.unitPriceFromMarketData =
marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice;
}
} else {
orders.push({
date: dateString,
fee: new Big(0),
feeInBaseCurrency: new Big(0),
quantity: new Big(0),
SymbolProfile: {
dataSource,
symbol
},
type: 'BUY',
unitPrice: marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice,
unitPriceFromMarketData:
marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice
});
}
const lastOrder = orders.at(-1);
lastUnitPrice = lastOrder.unitPriceFromMarketData ?? lastOrder.unitPrice;
}
// Sort orders so that the start and end placeholder order are at the correct
// position
orders = sortBy(orders, ({ date, itemType }) => {
let sortIndex = new Date(date);
if (itemType === 'end') {
sortIndex = addMilliseconds(sortIndex, 1);
} else if (itemType === 'start') {
sortIndex = addMilliseconds(sortIndex, -1);
}
return sortIndex.getTime();
});
const indexOfStartOrder = orders.findIndex(({ itemType }) => {
return itemType === 'start';
});
const indexOfEndOrder = orders.findIndex(({ itemType }) => {
return itemType === 'end';
});
let totalInvestmentDays = 0;
let sumOfTimeWeightedInvestments = new Big(0);
let sumOfTimeWeightedInvestmentsWithCurrencyEffect = new Big(0);
for (let i = 0; i < orders.length; i += 1) {
const order = orders[i];
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log();
console.log();
console.log(
i + 1,
order.date,
order.type,
order.itemType ? `(${order.itemType})` : ''
);
}
const exchangeRateAtOrderDate = exchangeRates[order.date];
if (order.type === 'DIVIDEND') {
const dividend = order.quantity.mul(order.unitPrice);
totalDividend = totalDividend.plus(dividend);
totalDividendInBaseCurrency = totalDividendInBaseCurrency.plus(
dividend.mul(exchangeRateAtOrderDate ?? 1)
);
} else if (order.type === 'INTEREST') {
const interest = order.quantity.mul(order.unitPrice);
totalInterest = totalInterest.plus(interest);
totalInterestInBaseCurrency = totalInterestInBaseCurrency.plus(
interest.mul(exchangeRateAtOrderDate ?? 1)
);
} else if (order.type === 'ITEM') {
const valuables = order.quantity.mul(order.unitPrice);
totalValuables = totalValuables.plus(valuables);
totalValuablesInBaseCurrency = totalValuablesInBaseCurrency.plus(
valuables.mul(exchangeRateAtOrderDate ?? 1)
);
} else if (order.type === 'LIABILITY') {
const liabilities = order.quantity.mul(order.unitPrice);
totalLiabilities = totalLiabilities.plus(liabilities);
totalLiabilitiesInBaseCurrency = totalLiabilitiesInBaseCurrency.plus(
liabilities.mul(exchangeRateAtOrderDate ?? 1)
);
}
if (order.itemType === 'start') {
// Take the unit price of the order as the market price if there are no
// orders of this symbol before the start date
order.unitPrice =
indexOfStartOrder === 0
? orders[i + 1]?.unitPrice
: unitPriceAtStartDate;
}
if (order.fee) {
order.feeInBaseCurrency = order.fee.mul(currentExchangeRate ?? 1);
order.feeInBaseCurrencyWithCurrencyEffect = order.fee.mul(
exchangeRateAtOrderDate ?? 1
);
}
const unitPrice = ['BUY', 'SELL'].includes(order.type)
? order.unitPrice
: order.unitPriceFromMarketData;
if (unitPrice) {
order.unitPriceInBaseCurrency = unitPrice.mul(currentExchangeRate ?? 1);
order.unitPriceInBaseCurrencyWithCurrencyEffect = unitPrice.mul(
exchangeRateAtOrderDate ?? 1
);
}
const valueOfInvestmentBeforeTransaction = totalUnits.mul(
order.unitPriceInBaseCurrency
);
const valueOfInvestmentBeforeTransactionWithCurrencyEffect =
totalUnits.mul(order.unitPriceInBaseCurrencyWithCurrencyEffect);
if (!investmentAtStartDate && i >= indexOfStartOrder) {
investmentAtStartDate = totalInvestment ?? new Big(0);
investmentAtStartDateWithCurrencyEffect =
totalInvestmentWithCurrencyEffect ?? new Big(0);
valueAtStartDate = valueOfInvestmentBeforeTransaction;
valueAtStartDateWithCurrencyEffect =
valueOfInvestmentBeforeTransactionWithCurrencyEffect;
}
let transactionInvestment = new Big(0);
let transactionInvestmentWithCurrencyEffect = new Big(0);
if (order.type === 'BUY') {
transactionInvestment = order.quantity
.mul(order.unitPriceInBaseCurrency)
.mul(getFactor(order.type));
transactionInvestmentWithCurrencyEffect = order.quantity
.mul(order.unitPriceInBaseCurrencyWithCurrencyEffect)
.mul(getFactor(order.type));
totalQuantityFromBuyTransactions =
totalQuantityFromBuyTransactions.plus(order.quantity);
totalInvestmentFromBuyTransactions =
totalInvestmentFromBuyTransactions.plus(transactionInvestment);
totalInvestmentFromBuyTransactionsWithCurrencyEffect =
totalInvestmentFromBuyTransactionsWithCurrencyEffect.plus(
transactionInvestmentWithCurrencyEffect
);
} else if (order.type === 'SELL') {
if (totalUnits.gt(0)) {
transactionInvestment = totalInvestment
.div(totalUnits)
.mul(order.quantity)
.mul(getFactor(order.type));
transactionInvestmentWithCurrencyEffect =
totalInvestmentWithCurrencyEffect
.div(totalUnits)
.mul(order.quantity)
.mul(getFactor(order.type));
}
}
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log('order.quantity', order.quantity.toNumber());
console.log('transactionInvestment', transactionInvestment.toNumber());
console.log(
'transactionInvestmentWithCurrencyEffect',
transactionInvestmentWithCurrencyEffect.toNumber()
);
}
const totalInvestmentBeforeTransaction = totalInvestment;
const totalInvestmentBeforeTransactionWithCurrencyEffect =
totalInvestmentWithCurrencyEffect;
totalInvestment = totalInvestment.plus(transactionInvestment);
totalInvestmentWithCurrencyEffect =
totalInvestmentWithCurrencyEffect.plus(
transactionInvestmentWithCurrencyEffect
);
if (i >= indexOfStartOrder && !initialValue) {
if (
i === indexOfStartOrder &&
!valueOfInvestmentBeforeTransaction.eq(0)
) {
initialValue = valueOfInvestmentBeforeTransaction;
initialValueWithCurrencyEffect =
valueOfInvestmentBeforeTransactionWithCurrencyEffect;
} else if (transactionInvestment.gt(0)) {
initialValue = transactionInvestment;
initialValueWithCurrencyEffect =
transactionInvestmentWithCurrencyEffect;
}
}
fees = fees.plus(order.feeInBaseCurrency ?? 0);
feesWithCurrencyEffect = feesWithCurrencyEffect.plus(
order.feeInBaseCurrencyWithCurrencyEffect ?? 0
);
totalUnits = totalUnits.plus(order.quantity.mul(getFactor(order.type)));
const valueOfInvestment = totalUnits.mul(order.unitPriceInBaseCurrency);
const valueOfInvestmentWithCurrencyEffect = totalUnits.mul(
order.unitPriceInBaseCurrencyWithCurrencyEffect
);
const grossPerformanceFromSell =
order.type === 'SELL'
? order.unitPriceInBaseCurrency
.minus(lastAveragePrice)
.mul(order.quantity)
: new Big(0);
const grossPerformanceFromSellWithCurrencyEffect =
order.type === 'SELL'
? order.unitPriceInBaseCurrencyWithCurrencyEffect
.minus(lastAveragePriceWithCurrencyEffect)
.mul(order.quantity)
: new Big(0);
grossPerformanceFromSells = grossPerformanceFromSells.plus(
grossPerformanceFromSell
);
grossPerformanceFromSellsWithCurrencyEffect =
grossPerformanceFromSellsWithCurrencyEffect.plus(
grossPerformanceFromSellWithCurrencyEffect
);
lastAveragePrice = totalQuantityFromBuyTransactions.eq(0)
? new Big(0)
: totalInvestmentFromBuyTransactions.div(
totalQuantityFromBuyTransactions
);
lastAveragePriceWithCurrencyEffect = totalQuantityFromBuyTransactions.eq(
0
)
? new Big(0)
: totalInvestmentFromBuyTransactionsWithCurrencyEffect.div(
totalQuantityFromBuyTransactions
);
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log(
'grossPerformanceFromSells',
grossPerformanceFromSells.toNumber()
);
console.log(
'grossPerformanceFromSellWithCurrencyEffect',
grossPerformanceFromSellWithCurrencyEffect.toNumber()
);
}
const newGrossPerformance = valueOfInvestment
.minus(totalInvestment)
.plus(grossPerformanceFromSells);
const newGrossPerformanceWithCurrencyEffect =
valueOfInvestmentWithCurrencyEffect
.minus(totalInvestmentWithCurrencyEffect)
.plus(grossPerformanceFromSellsWithCurrencyEffect);
grossPerformance = newGrossPerformance;
grossPerformanceWithCurrencyEffect =
newGrossPerformanceWithCurrencyEffect;
if (order.itemType === 'start') {
feesAtStartDate = fees;
feesAtStartDateWithCurrencyEffect = feesWithCurrencyEffect;
grossPerformanceAtStartDate = grossPerformance;
grossPerformanceAtStartDateWithCurrencyEffect =
grossPerformanceWithCurrencyEffect;
}
if (i > indexOfStartOrder) {
// Only consider periods with an investment for the calculation of
// the time weighted investment
if (
valueOfInvestmentBeforeTransaction.gt(0) &&
['BUY', 'SELL'].includes(order.type)
) {
// Calculate the number of days since the previous order
const orderDate = new Date(order.date);
const previousOrderDate = new Date(orders[i - 1].date);
let daysSinceLastOrder = differenceInDays(
orderDate,
previousOrderDate
);
if (daysSinceLastOrder <= 0) {
// The time between two activities on the same day is unknown
// -> Set it to the smallest floating point number greater than 0
daysSinceLastOrder = Number.EPSILON;
}
// Sum up the total investment days since the start date to calculate
// the time weighted investment
totalInvestmentDays += daysSinceLastOrder;
sumOfTimeWeightedInvestments = sumOfTimeWeightedInvestments.add(
valueAtStartDate
.minus(investmentAtStartDate)
.plus(totalInvestmentBeforeTransaction)
.mul(daysSinceLastOrder)
);
sumOfTimeWeightedInvestmentsWithCurrencyEffect =
sumOfTimeWeightedInvestmentsWithCurrencyEffect.add(
valueAtStartDateWithCurrencyEffect
.minus(investmentAtStartDateWithCurrencyEffect)
.plus(totalInvestmentBeforeTransactionWithCurrencyEffect)
.mul(daysSinceLastOrder)
);
}
currentValues[order.date] = valueOfInvestment;
currentValuesWithCurrencyEffect[order.date] =
valueOfInvestmentWithCurrencyEffect;
netPerformanceValues[order.date] = grossPerformance
.minus(grossPerformanceAtStartDate)
.minus(fees.minus(feesAtStartDate));
netPerformanceValuesWithCurrencyEffect[order.date] =
grossPerformanceWithCurrencyEffect
.minus(grossPerformanceAtStartDateWithCurrencyEffect)
.minus(
feesWithCurrencyEffect.minus(feesAtStartDateWithCurrencyEffect)
);
investmentValuesAccumulated[order.date] = totalInvestment;
investmentValuesAccumulatedWithCurrencyEffect[order.date] =
totalInvestmentWithCurrencyEffect;
investmentValuesWithCurrencyEffect[order.date] = (
investmentValuesWithCurrencyEffect[order.date] ?? new Big(0)
).add(transactionInvestmentWithCurrencyEffect);
timeWeightedInvestmentValues[order.date] =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestments.div(totalInvestmentDays)
: new Big(0);
timeWeightedInvestmentValuesWithCurrencyEffect[order.date] =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestmentsWithCurrencyEffect.div(
totalInvestmentDays
)
: new Big(0);
}
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log('totalInvestment', totalInvestment.toNumber());
console.log(
'totalInvestmentWithCurrencyEffect',
totalInvestmentWithCurrencyEffect.toNumber()
);
console.log(
'totalGrossPerformance',
grossPerformance.minus(grossPerformanceAtStartDate).toNumber()
);
console.log(
'totalGrossPerformanceWithCurrencyEffect',
grossPerformanceWithCurrencyEffect
.minus(grossPerformanceAtStartDateWithCurrencyEffect)
.toNumber()
);
}
if (i === indexOfEndOrder) {
break;
}
}
const totalGrossPerformance = grossPerformance.minus(
grossPerformanceAtStartDate
);
const totalGrossPerformanceWithCurrencyEffect =
grossPerformanceWithCurrencyEffect.minus(
grossPerformanceAtStartDateWithCurrencyEffect
);
const totalNetPerformance = grossPerformance
.minus(grossPerformanceAtStartDate)
.minus(fees.minus(feesAtStartDate));
const timeWeightedAverageInvestmentBetweenStartAndEndDate =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestments.div(totalInvestmentDays)
: new Big(0);
const timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestmentsWithCurrencyEffect.div(
totalInvestmentDays
)
: new Big(0);
const grossPerformancePercentage =
timeWeightedAverageInvestmentBetweenStartAndEndDate.gt(0)
? totalGrossPerformance.div(
timeWeightedAverageInvestmentBetweenStartAndEndDate
)
: new Big(0);
const grossPerformancePercentageWithCurrencyEffect =
timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect.gt(
0
)
? totalGrossPerformanceWithCurrencyEffect.div(
timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect
)
: new Big(0);
const feesPerUnit = totalUnits.gt(0)
? fees.minus(feesAtStartDate).div(totalUnits)
: new Big(0);
const feesPerUnitWithCurrencyEffect = totalUnits.gt(0)
? feesWithCurrencyEffect
.minus(feesAtStartDateWithCurrencyEffect)
.div(totalUnits)
: new Big(0);
const netPerformancePercentage =
timeWeightedAverageInvestmentBetweenStartAndEndDate.gt(0)
? totalNetPerformance.div(
timeWeightedAverageInvestmentBetweenStartAndEndDate
)
: new Big(0);
const netPerformancePercentageWithCurrencyEffectMap: {
[key: DateRange]: Big;
} = {};
const netPerformanceWithCurrencyEffectMap: {
[key: DateRange]: Big;
} = {};
for (const dateRange of [
'1d',
'1y',
'5y',
'max',
'mtd',
'wtd',
'ytd'
// TODO:
// ...eachYearOfInterval({ end, start })
// .filter((date) => {
// return !isThisYear(date);
// })
// .map((date) => {
// return format(date, 'yyyy');
// })
] as DateRange[]) {
const dateInterval = getIntervalFromDateRange(dateRange);
const endDate = dateInterval.endDate;
let startDate = dateInterval.startDate;
if (isBefore(startDate, start)) {
startDate = start;
}
const rangeEndDateString = format(endDate, DATE_FORMAT);
const rangeStartDateString = format(startDate, DATE_FORMAT);
const currentValuesAtDateRangeStartWithCurrencyEffect =
currentValuesWithCurrencyEffect[rangeStartDateString] ?? new Big(0);
const investmentValuesAccumulatedAtStartDateWithCurrencyEffect =
investmentValuesAccumulatedWithCurrencyEffect[rangeStartDateString] ??
new Big(0);
const grossPerformanceAtDateRangeStartWithCurrencyEffect =
currentValuesAtDateRangeStartWithCurrencyEffect.minus(
investmentValuesAccumulatedAtStartDateWithCurrencyEffect
);
let average = new Big(0);
let dayCount = 0;
for (let i = this.chartDates.length - 1; i >= 0; i -= 1) {
const date = this.chartDates[i];
if (date > rangeEndDateString) {
continue;
} else if (date < rangeStartDateString) {
break;
}
if (
investmentValuesAccumulatedWithCurrencyEffect[date] instanceof Big &&
investmentValuesAccumulatedWithCurrencyEffect[date].gt(0)
) {
average = average.add(
investmentValuesAccumulatedWithCurrencyEffect[date].add(
grossPerformanceAtDateRangeStartWithCurrencyEffect
)
);
dayCount++;
}
}
if (dayCount > 0) {
average = average.div(dayCount);
}
netPerformanceWithCurrencyEffectMap[dateRange] =
netPerformanceValuesWithCurrencyEffect[rangeEndDateString]?.minus(
// If the date range is 'max', take 0 as a start value. Otherwise,
// the value of the end of the day of the start date is taken which
// differs from the buying price.
dateRange === 'max'
? new Big(0)
: (netPerformanceValuesWithCurrencyEffect[rangeStartDateString] ??
new Big(0))
) ?? new Big(0);
netPerformancePercentageWithCurrencyEffectMap[dateRange] = average.gt(0)
? netPerformanceWithCurrencyEffectMap[dateRange].div(average)
: new Big(0);
}
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log(
`
${symbol}
Unit price: ${orders[indexOfStartOrder].unitPrice.toFixed(
2
)} -> ${unitPriceAtEndDate.toFixed(2)}
Total investment: ${totalInvestment.toFixed(2)}
Total investment with currency effect: ${totalInvestmentWithCurrencyEffect.toFixed(
2
)}
Time weighted investment: ${timeWeightedAverageInvestmentBetweenStartAndEndDate.toFixed(
2
)}
Time weighted investment with currency effect: ${timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect.toFixed(
2
)}
Total dividend: ${totalDividend.toFixed(2)}
Gross performance: ${totalGrossPerformance.toFixed(
2
)} / ${grossPerformancePercentage.mul(100).toFixed(2)}%
Gross performance with currency effect: ${totalGrossPerformanceWithCurrencyEffect.toFixed(
2
)} / ${grossPerformancePercentageWithCurrencyEffect
.mul(100)
.toFixed(2)}%
Fees per unit: ${feesPerUnit.toFixed(2)}
Fees per unit with currency effect: ${feesPerUnitWithCurrencyEffect.toFixed(
2
)}
Net performance: ${totalNetPerformance.toFixed(
2
)} / ${netPerformancePercentage.mul(100).toFixed(2)}%
Net performance with currency effect: ${netPerformancePercentageWithCurrencyEffectMap[
'max'
].toFixed(2)}%`
);
}
return {
currentValues,
currentValuesWithCurrencyEffect,
feesWithCurrencyEffect,
grossPerformancePercentage,
grossPerformancePercentageWithCurrencyEffect,
initialValue,
initialValueWithCurrencyEffect,
investmentValuesAccumulated,
investmentValuesAccumulatedWithCurrencyEffect,
investmentValuesWithCurrencyEffect,
netPerformancePercentage,
netPerformancePercentageWithCurrencyEffectMap,
netPerformanceValues,
netPerformanceValuesWithCurrencyEffect,
netPerformanceWithCurrencyEffectMap,
timeWeightedInvestmentValues,
timeWeightedInvestmentValuesWithCurrencyEffect,
totalAccountBalanceInBaseCurrency,
totalDividend,
totalDividendInBaseCurrency,
totalInterest,
totalInterestInBaseCurrency,
totalInvestment,
totalInvestmentWithCurrencyEffect,
totalLiabilities,
totalLiabilitiesInBaseCurrency,
totalValuables,
totalValuablesInBaseCurrency,
grossPerformance: totalGrossPerformance,
grossPerformanceWithCurrencyEffect:
totalGrossPerformanceWithCurrencyEffect,
hasErrors: totalUnits.gt(0) && (!initialValue || !unitPriceAtEndDate),
netPerformance: totalNetPerformance,
timeWeightedInvestment:
timeWeightedAverageInvestmentBetweenStartAndEndDate,
timeWeightedInvestmentWithCurrencyEffect:
timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect
};
}
}

959
apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts

@ -1,969 +1,24 @@
import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator';
import { PortfolioOrderItem } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-order-item.interface';
import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
AssetProfileIdentifier,
SymbolMetrics
} from '@ghostfolio/common/interfaces';
import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models';
import { DateRange } from '@ghostfolio/common/types';
import { PortfolioSnapshot } from '@ghostfolio/common/models';
import { Logger } from '@nestjs/common';
import { Big } from 'big.js';
import { addMilliseconds, differenceInDays, format, isBefore } from 'date-fns';
import { cloneDeep, sortBy } from 'lodash';
export class TWRPortfolioCalculator extends PortfolioCalculator {
private chartDates: string[];
protected calculateOverallPerformance(
positions: TimelinePosition[]
): PortfolioSnapshot {
let currentValueInBaseCurrency = new Big(0);
let grossPerformance = new Big(0);
let grossPerformanceWithCurrencyEffect = new Big(0);
let hasErrors = false;
let netPerformance = new Big(0);
let totalFeesWithCurrencyEffect = new Big(0);
const totalInterestWithCurrencyEffect = new Big(0);
let totalInvestment = new Big(0);
let totalInvestmentWithCurrencyEffect = new Big(0);
let totalTimeWeightedInvestment = new Big(0);
let totalTimeWeightedInvestmentWithCurrencyEffect = new Big(0);
for (const currentPosition of positions) {
if (currentPosition.feeInBaseCurrency) {
totalFeesWithCurrencyEffect = totalFeesWithCurrencyEffect.plus(
currentPosition.feeInBaseCurrency
);
}
if (currentPosition.valueInBaseCurrency) {
currentValueInBaseCurrency = currentValueInBaseCurrency.plus(
currentPosition.valueInBaseCurrency
);
} else {
hasErrors = true;
}
if (currentPosition.investment) {
totalInvestment = totalInvestment.plus(currentPosition.investment);
totalInvestmentWithCurrencyEffect =
totalInvestmentWithCurrencyEffect.plus(
currentPosition.investmentWithCurrencyEffect
);
} else {
hasErrors = true;
}
if (currentPosition.grossPerformance) {
grossPerformance = grossPerformance.plus(
currentPosition.grossPerformance
);
grossPerformanceWithCurrencyEffect =
grossPerformanceWithCurrencyEffect.plus(
currentPosition.grossPerformanceWithCurrencyEffect
);
netPerformance = netPerformance.plus(currentPosition.netPerformance);
} else if (!currentPosition.quantity.eq(0)) {
hasErrors = true;
}
if (currentPosition.timeWeightedInvestment) {
totalTimeWeightedInvestment = totalTimeWeightedInvestment.plus(
currentPosition.timeWeightedInvestment
);
totalTimeWeightedInvestmentWithCurrencyEffect =
totalTimeWeightedInvestmentWithCurrencyEffect.plus(
currentPosition.timeWeightedInvestmentWithCurrencyEffect
);
} else if (!currentPosition.quantity.eq(0)) {
Logger.warn(
`Missing historical market data for ${currentPosition.symbol} (${currentPosition.dataSource})`,
'PortfolioCalculator'
);
hasErrors = true;
}
}
return {
currentValueInBaseCurrency,
hasErrors,
positions,
totalFeesWithCurrencyEffect,
totalInterestWithCurrencyEffect,
totalInvestment,
totalInvestmentWithCurrencyEffect,
activitiesCount: this.activities.filter(({ type }) => {
return ['BUY', 'SELL'].includes(type);
}).length,
createdAt: new Date(),
errors: [],
historicalData: [],
totalLiabilitiesWithCurrencyEffect: new Big(0),
totalValuablesWithCurrencyEffect: new Big(0)
};
export class TwrPortfolioCalculator extends PortfolioCalculator {
protected calculateOverallPerformance(): PortfolioSnapshot {
throw new Error('Method not implemented.');
}
protected getSymbolMetrics({
chartDateMap,
dataSource,
end,
exchangeRates,
marketSymbolMap,
start,
symbol
}: {
chartDateMap?: { [date: string]: boolean };
protected getSymbolMetrics({}: {
end: Date;
exchangeRates: { [dateString: string]: number };
marketSymbolMap: {
[date: string]: { [symbol: string]: Big };
};
start: Date;
step?: number;
} & AssetProfileIdentifier): SymbolMetrics {
const currentExchangeRate = exchangeRates[format(new Date(), DATE_FORMAT)];
const currentValues: { [date: string]: Big } = {};
const currentValuesWithCurrencyEffect: { [date: string]: Big } = {};
let fees = new Big(0);
let feesAtStartDate = new Big(0);
let feesAtStartDateWithCurrencyEffect = new Big(0);
let feesWithCurrencyEffect = new Big(0);
let grossPerformance = new Big(0);
let grossPerformanceWithCurrencyEffect = new Big(0);
let grossPerformanceAtStartDate = new Big(0);
let grossPerformanceAtStartDateWithCurrencyEffect = new Big(0);
let grossPerformanceFromSells = new Big(0);
let grossPerformanceFromSellsWithCurrencyEffect = new Big(0);
let initialValue: Big;
let initialValueWithCurrencyEffect: Big;
let investmentAtStartDate: Big;
let investmentAtStartDateWithCurrencyEffect: Big;
const investmentValuesAccumulated: { [date: string]: Big } = {};
const investmentValuesAccumulatedWithCurrencyEffect: {
[date: string]: Big;
} = {};
const investmentValuesWithCurrencyEffect: { [date: string]: Big } = {};
let lastAveragePrice = new Big(0);
let lastAveragePriceWithCurrencyEffect = new Big(0);
const netPerformanceValues: { [date: string]: Big } = {};
const netPerformanceValuesWithCurrencyEffect: { [date: string]: Big } = {};
const timeWeightedInvestmentValues: { [date: string]: Big } = {};
const timeWeightedInvestmentValuesWithCurrencyEffect: {
[date: string]: Big;
} = {};
const totalAccountBalanceInBaseCurrency = new Big(0);
let totalDividend = new Big(0);
let totalDividendInBaseCurrency = new Big(0);
let totalInterest = new Big(0);
let totalInterestInBaseCurrency = new Big(0);
let totalInvestment = new Big(0);
let totalInvestmentFromBuyTransactions = new Big(0);
let totalInvestmentFromBuyTransactionsWithCurrencyEffect = new Big(0);
let totalInvestmentWithCurrencyEffect = new Big(0);
let totalLiabilities = new Big(0);
let totalLiabilitiesInBaseCurrency = new Big(0);
let totalQuantityFromBuyTransactions = new Big(0);
let totalUnits = new Big(0);
let totalValuables = new Big(0);
let totalValuablesInBaseCurrency = new Big(0);
let valueAtStartDate: Big;
let valueAtStartDateWithCurrencyEffect: Big;
// Clone orders to keep the original values in this.orders
let orders: PortfolioOrderItem[] = cloneDeep(
this.activities.filter(({ SymbolProfile }) => {
return SymbolProfile.symbol === symbol;
})
);
if (orders.length <= 0) {
return {
currentValues: {},
currentValuesWithCurrencyEffect: {},
feesWithCurrencyEffect: new Big(0),
grossPerformance: new Big(0),
grossPerformancePercentage: new Big(0),
grossPerformancePercentageWithCurrencyEffect: new Big(0),
grossPerformanceWithCurrencyEffect: new Big(0),
hasErrors: false,
initialValue: new Big(0),
initialValueWithCurrencyEffect: new Big(0),
investmentValuesAccumulated: {},
investmentValuesAccumulatedWithCurrencyEffect: {},
investmentValuesWithCurrencyEffect: {},
netPerformance: new Big(0),
netPerformancePercentage: new Big(0),
netPerformancePercentageWithCurrencyEffectMap: {},
netPerformanceValues: {},
netPerformanceValuesWithCurrencyEffect: {},
netPerformanceWithCurrencyEffectMap: {},
timeWeightedInvestment: new Big(0),
timeWeightedInvestmentValues: {},
timeWeightedInvestmentValuesWithCurrencyEffect: {},
timeWeightedInvestmentWithCurrencyEffect: new Big(0),
totalAccountBalanceInBaseCurrency: new Big(0),
totalDividend: new Big(0),
totalDividendInBaseCurrency: new Big(0),
totalInterest: new Big(0),
totalInterestInBaseCurrency: new Big(0),
totalInvestment: new Big(0),
totalInvestmentWithCurrencyEffect: new Big(0),
totalLiabilities: new Big(0),
totalLiabilitiesInBaseCurrency: new Big(0),
totalValuables: new Big(0),
totalValuablesInBaseCurrency: new Big(0)
};
}
const dateOfFirstTransaction = new Date(orders[0].date);
const endDateString = format(end, DATE_FORMAT);
const startDateString = format(start, DATE_FORMAT);
const unitPriceAtStartDate = marketSymbolMap[startDateString]?.[symbol];
const unitPriceAtEndDate = marketSymbolMap[endDateString]?.[symbol];
if (
!unitPriceAtEndDate ||
(!unitPriceAtStartDate && isBefore(dateOfFirstTransaction, start))
) {
return {
currentValues: {},
currentValuesWithCurrencyEffect: {},
feesWithCurrencyEffect: new Big(0),
grossPerformance: new Big(0),
grossPerformancePercentage: new Big(0),
grossPerformancePercentageWithCurrencyEffect: new Big(0),
grossPerformanceWithCurrencyEffect: new Big(0),
hasErrors: true,
initialValue: new Big(0),
initialValueWithCurrencyEffect: new Big(0),
investmentValuesAccumulated: {},
investmentValuesAccumulatedWithCurrencyEffect: {},
investmentValuesWithCurrencyEffect: {},
netPerformance: new Big(0),
netPerformancePercentage: new Big(0),
netPerformancePercentageWithCurrencyEffectMap: {},
netPerformanceWithCurrencyEffectMap: {},
netPerformanceValues: {},
netPerformanceValuesWithCurrencyEffect: {},
timeWeightedInvestment: new Big(0),
timeWeightedInvestmentValues: {},
timeWeightedInvestmentValuesWithCurrencyEffect: {},
timeWeightedInvestmentWithCurrencyEffect: new Big(0),
totalAccountBalanceInBaseCurrency: new Big(0),
totalDividend: new Big(0),
totalDividendInBaseCurrency: new Big(0),
totalInterest: new Big(0),
totalInterestInBaseCurrency: new Big(0),
totalInvestment: new Big(0),
totalInvestmentWithCurrencyEffect: new Big(0),
totalLiabilities: new Big(0),
totalLiabilitiesInBaseCurrency: new Big(0),
totalValuables: new Big(0),
totalValuablesInBaseCurrency: new Big(0)
};
}
// Add a synthetic order at the start and the end date
orders.push({
date: startDateString,
fee: new Big(0),
feeInBaseCurrency: new Big(0),
itemType: 'start',
quantity: new Big(0),
SymbolProfile: {
dataSource,
symbol
},
type: 'BUY',
unitPrice: unitPriceAtStartDate
});
orders.push({
date: endDateString,
fee: new Big(0),
feeInBaseCurrency: new Big(0),
itemType: 'end',
SymbolProfile: {
dataSource,
symbol
},
quantity: new Big(0),
type: 'BUY',
unitPrice: unitPriceAtEndDate
});
let lastUnitPrice: Big;
const ordersByDate: { [date: string]: PortfolioOrderItem[] } = {};
for (const order of orders) {
ordersByDate[order.date] = ordersByDate[order.date] ?? [];
ordersByDate[order.date].push(order);
}
if (!this.chartDates) {
this.chartDates = Object.keys(chartDateMap).sort();
}
for (const dateString of this.chartDates) {
if (dateString < startDateString) {
continue;
} else if (dateString > endDateString) {
break;
}
if (ordersByDate[dateString]?.length > 0) {
for (const order of ordersByDate[dateString]) {
order.unitPriceFromMarketData =
marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice;
}
} else {
orders.push({
date: dateString,
fee: new Big(0),
feeInBaseCurrency: new Big(0),
quantity: new Big(0),
SymbolProfile: {
dataSource,
symbol
},
type: 'BUY',
unitPrice: marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice,
unitPriceFromMarketData:
marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice
});
}
const lastOrder = orders.at(-1);
lastUnitPrice = lastOrder.unitPriceFromMarketData ?? lastOrder.unitPrice;
}
// Sort orders so that the start and end placeholder order are at the correct
// position
orders = sortBy(orders, ({ date, itemType }) => {
let sortIndex = new Date(date);
if (itemType === 'end') {
sortIndex = addMilliseconds(sortIndex, 1);
} else if (itemType === 'start') {
sortIndex = addMilliseconds(sortIndex, -1);
}
return sortIndex.getTime();
});
const indexOfStartOrder = orders.findIndex(({ itemType }) => {
return itemType === 'start';
});
const indexOfEndOrder = orders.findIndex(({ itemType }) => {
return itemType === 'end';
});
let totalInvestmentDays = 0;
let sumOfTimeWeightedInvestments = new Big(0);
let sumOfTimeWeightedInvestmentsWithCurrencyEffect = new Big(0);
for (let i = 0; i < orders.length; i += 1) {
const order = orders[i];
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log();
console.log();
console.log(
i + 1,
order.date,
order.type,
order.itemType ? `(${order.itemType})` : ''
);
}
const exchangeRateAtOrderDate = exchangeRates[order.date];
if (order.type === 'DIVIDEND') {
const dividend = order.quantity.mul(order.unitPrice);
totalDividend = totalDividend.plus(dividend);
totalDividendInBaseCurrency = totalDividendInBaseCurrency.plus(
dividend.mul(exchangeRateAtOrderDate ?? 1)
);
} else if (order.type === 'INTEREST') {
const interest = order.quantity.mul(order.unitPrice);
totalInterest = totalInterest.plus(interest);
totalInterestInBaseCurrency = totalInterestInBaseCurrency.plus(
interest.mul(exchangeRateAtOrderDate ?? 1)
);
} else if (order.type === 'ITEM') {
const valuables = order.quantity.mul(order.unitPrice);
totalValuables = totalValuables.plus(valuables);
totalValuablesInBaseCurrency = totalValuablesInBaseCurrency.plus(
valuables.mul(exchangeRateAtOrderDate ?? 1)
);
} else if (order.type === 'LIABILITY') {
const liabilities = order.quantity.mul(order.unitPrice);
totalLiabilities = totalLiabilities.plus(liabilities);
totalLiabilitiesInBaseCurrency = totalLiabilitiesInBaseCurrency.plus(
liabilities.mul(exchangeRateAtOrderDate ?? 1)
);
}
if (order.itemType === 'start') {
// Take the unit price of the order as the market price if there are no
// orders of this symbol before the start date
order.unitPrice =
indexOfStartOrder === 0
? orders[i + 1]?.unitPrice
: unitPriceAtStartDate;
}
if (order.fee) {
order.feeInBaseCurrency = order.fee.mul(currentExchangeRate ?? 1);
order.feeInBaseCurrencyWithCurrencyEffect = order.fee.mul(
exchangeRateAtOrderDate ?? 1
);
}
const unitPrice = ['BUY', 'SELL'].includes(order.type)
? order.unitPrice
: order.unitPriceFromMarketData;
if (unitPrice) {
order.unitPriceInBaseCurrency = unitPrice.mul(currentExchangeRate ?? 1);
order.unitPriceInBaseCurrencyWithCurrencyEffect = unitPrice.mul(
exchangeRateAtOrderDate ?? 1
);
}
const valueOfInvestmentBeforeTransaction = totalUnits.mul(
order.unitPriceInBaseCurrency
);
const valueOfInvestmentBeforeTransactionWithCurrencyEffect =
totalUnits.mul(order.unitPriceInBaseCurrencyWithCurrencyEffect);
if (!investmentAtStartDate && i >= indexOfStartOrder) {
investmentAtStartDate = totalInvestment ?? new Big(0);
investmentAtStartDateWithCurrencyEffect =
totalInvestmentWithCurrencyEffect ?? new Big(0);
valueAtStartDate = valueOfInvestmentBeforeTransaction;
valueAtStartDateWithCurrencyEffect =
valueOfInvestmentBeforeTransactionWithCurrencyEffect;
}
let transactionInvestment = new Big(0);
let transactionInvestmentWithCurrencyEffect = new Big(0);
if (order.type === 'BUY') {
transactionInvestment = order.quantity
.mul(order.unitPriceInBaseCurrency)
.mul(getFactor(order.type));
transactionInvestmentWithCurrencyEffect = order.quantity
.mul(order.unitPriceInBaseCurrencyWithCurrencyEffect)
.mul(getFactor(order.type));
totalQuantityFromBuyTransactions =
totalQuantityFromBuyTransactions.plus(order.quantity);
totalInvestmentFromBuyTransactions =
totalInvestmentFromBuyTransactions.plus(transactionInvestment);
totalInvestmentFromBuyTransactionsWithCurrencyEffect =
totalInvestmentFromBuyTransactionsWithCurrencyEffect.plus(
transactionInvestmentWithCurrencyEffect
);
} else if (order.type === 'SELL') {
if (totalUnits.gt(0)) {
transactionInvestment = totalInvestment
.div(totalUnits)
.mul(order.quantity)
.mul(getFactor(order.type));
transactionInvestmentWithCurrencyEffect =
totalInvestmentWithCurrencyEffect
.div(totalUnits)
.mul(order.quantity)
.mul(getFactor(order.type));
}
}
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log('order.quantity', order.quantity.toNumber());
console.log('transactionInvestment', transactionInvestment.toNumber());
console.log(
'transactionInvestmentWithCurrencyEffect',
transactionInvestmentWithCurrencyEffect.toNumber()
);
}
const totalInvestmentBeforeTransaction = totalInvestment;
const totalInvestmentBeforeTransactionWithCurrencyEffect =
totalInvestmentWithCurrencyEffect;
totalInvestment = totalInvestment.plus(transactionInvestment);
totalInvestmentWithCurrencyEffect =
totalInvestmentWithCurrencyEffect.plus(
transactionInvestmentWithCurrencyEffect
);
if (i >= indexOfStartOrder && !initialValue) {
if (
i === indexOfStartOrder &&
!valueOfInvestmentBeforeTransaction.eq(0)
) {
initialValue = valueOfInvestmentBeforeTransaction;
initialValueWithCurrencyEffect =
valueOfInvestmentBeforeTransactionWithCurrencyEffect;
} else if (transactionInvestment.gt(0)) {
initialValue = transactionInvestment;
initialValueWithCurrencyEffect =
transactionInvestmentWithCurrencyEffect;
}
}
fees = fees.plus(order.feeInBaseCurrency ?? 0);
feesWithCurrencyEffect = feesWithCurrencyEffect.plus(
order.feeInBaseCurrencyWithCurrencyEffect ?? 0
);
totalUnits = totalUnits.plus(order.quantity.mul(getFactor(order.type)));
const valueOfInvestment = totalUnits.mul(order.unitPriceInBaseCurrency);
const valueOfInvestmentWithCurrencyEffect = totalUnits.mul(
order.unitPriceInBaseCurrencyWithCurrencyEffect
);
const grossPerformanceFromSell =
order.type === 'SELL'
? order.unitPriceInBaseCurrency
.minus(lastAveragePrice)
.mul(order.quantity)
: new Big(0);
const grossPerformanceFromSellWithCurrencyEffect =
order.type === 'SELL'
? order.unitPriceInBaseCurrencyWithCurrencyEffect
.minus(lastAveragePriceWithCurrencyEffect)
.mul(order.quantity)
: new Big(0);
grossPerformanceFromSells = grossPerformanceFromSells.plus(
grossPerformanceFromSell
);
grossPerformanceFromSellsWithCurrencyEffect =
grossPerformanceFromSellsWithCurrencyEffect.plus(
grossPerformanceFromSellWithCurrencyEffect
);
lastAveragePrice = totalQuantityFromBuyTransactions.eq(0)
? new Big(0)
: totalInvestmentFromBuyTransactions.div(
totalQuantityFromBuyTransactions
);
lastAveragePriceWithCurrencyEffect = totalQuantityFromBuyTransactions.eq(
0
)
? new Big(0)
: totalInvestmentFromBuyTransactionsWithCurrencyEffect.div(
totalQuantityFromBuyTransactions
);
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log(
'grossPerformanceFromSells',
grossPerformanceFromSells.toNumber()
);
console.log(
'grossPerformanceFromSellWithCurrencyEffect',
grossPerformanceFromSellWithCurrencyEffect.toNumber()
);
}
const newGrossPerformance = valueOfInvestment
.minus(totalInvestment)
.plus(grossPerformanceFromSells);
const newGrossPerformanceWithCurrencyEffect =
valueOfInvestmentWithCurrencyEffect
.minus(totalInvestmentWithCurrencyEffect)
.plus(grossPerformanceFromSellsWithCurrencyEffect);
grossPerformance = newGrossPerformance;
grossPerformanceWithCurrencyEffect =
newGrossPerformanceWithCurrencyEffect;
if (order.itemType === 'start') {
feesAtStartDate = fees;
feesAtStartDateWithCurrencyEffect = feesWithCurrencyEffect;
grossPerformanceAtStartDate = grossPerformance;
grossPerformanceAtStartDateWithCurrencyEffect =
grossPerformanceWithCurrencyEffect;
}
if (i > indexOfStartOrder) {
// Only consider periods with an investment for the calculation of
// the time weighted investment
if (
valueOfInvestmentBeforeTransaction.gt(0) &&
['BUY', 'SELL'].includes(order.type)
) {
// Calculate the number of days since the previous order
const orderDate = new Date(order.date);
const previousOrderDate = new Date(orders[i - 1].date);
let daysSinceLastOrder = differenceInDays(
orderDate,
previousOrderDate
);
if (daysSinceLastOrder <= 0) {
// The time between two activities on the same day is unknown
// -> Set it to the smallest floating point number greater than 0
daysSinceLastOrder = Number.EPSILON;
}
// Sum up the total investment days since the start date to calculate
// the time weighted investment
totalInvestmentDays += daysSinceLastOrder;
sumOfTimeWeightedInvestments = sumOfTimeWeightedInvestments.add(
valueAtStartDate
.minus(investmentAtStartDate)
.plus(totalInvestmentBeforeTransaction)
.mul(daysSinceLastOrder)
);
sumOfTimeWeightedInvestmentsWithCurrencyEffect =
sumOfTimeWeightedInvestmentsWithCurrencyEffect.add(
valueAtStartDateWithCurrencyEffect
.minus(investmentAtStartDateWithCurrencyEffect)
.plus(totalInvestmentBeforeTransactionWithCurrencyEffect)
.mul(daysSinceLastOrder)
);
}
currentValues[order.date] = valueOfInvestment;
currentValuesWithCurrencyEffect[order.date] =
valueOfInvestmentWithCurrencyEffect;
netPerformanceValues[order.date] = grossPerformance
.minus(grossPerformanceAtStartDate)
.minus(fees.minus(feesAtStartDate));
netPerformanceValuesWithCurrencyEffect[order.date] =
grossPerformanceWithCurrencyEffect
.minus(grossPerformanceAtStartDateWithCurrencyEffect)
.minus(
feesWithCurrencyEffect.minus(feesAtStartDateWithCurrencyEffect)
);
investmentValuesAccumulated[order.date] = totalInvestment;
investmentValuesAccumulatedWithCurrencyEffect[order.date] =
totalInvestmentWithCurrencyEffect;
investmentValuesWithCurrencyEffect[order.date] = (
investmentValuesWithCurrencyEffect[order.date] ?? new Big(0)
).add(transactionInvestmentWithCurrencyEffect);
timeWeightedInvestmentValues[order.date] =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestments.div(totalInvestmentDays)
: new Big(0);
timeWeightedInvestmentValuesWithCurrencyEffect[order.date] =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestmentsWithCurrencyEffect.div(
totalInvestmentDays
)
: new Big(0);
}
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log('totalInvestment', totalInvestment.toNumber());
console.log(
'totalInvestmentWithCurrencyEffect',
totalInvestmentWithCurrencyEffect.toNumber()
);
console.log(
'totalGrossPerformance',
grossPerformance.minus(grossPerformanceAtStartDate).toNumber()
);
console.log(
'totalGrossPerformanceWithCurrencyEffect',
grossPerformanceWithCurrencyEffect
.minus(grossPerformanceAtStartDateWithCurrencyEffect)
.toNumber()
);
}
if (i === indexOfEndOrder) {
break;
}
}
const totalGrossPerformance = grossPerformance.minus(
grossPerformanceAtStartDate
);
const totalGrossPerformanceWithCurrencyEffect =
grossPerformanceWithCurrencyEffect.minus(
grossPerformanceAtStartDateWithCurrencyEffect
);
const totalNetPerformance = grossPerformance
.minus(grossPerformanceAtStartDate)
.minus(fees.minus(feesAtStartDate));
const timeWeightedAverageInvestmentBetweenStartAndEndDate =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestments.div(totalInvestmentDays)
: new Big(0);
const timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestmentsWithCurrencyEffect.div(
totalInvestmentDays
)
: new Big(0);
const grossPerformancePercentage =
timeWeightedAverageInvestmentBetweenStartAndEndDate.gt(0)
? totalGrossPerformance.div(
timeWeightedAverageInvestmentBetweenStartAndEndDate
)
: new Big(0);
const grossPerformancePercentageWithCurrencyEffect =
timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect.gt(
0
)
? totalGrossPerformanceWithCurrencyEffect.div(
timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect
)
: new Big(0);
const feesPerUnit = totalUnits.gt(0)
? fees.minus(feesAtStartDate).div(totalUnits)
: new Big(0);
const feesPerUnitWithCurrencyEffect = totalUnits.gt(0)
? feesWithCurrencyEffect
.minus(feesAtStartDateWithCurrencyEffect)
.div(totalUnits)
: new Big(0);
const netPerformancePercentage =
timeWeightedAverageInvestmentBetweenStartAndEndDate.gt(0)
? totalNetPerformance.div(
timeWeightedAverageInvestmentBetweenStartAndEndDate
)
: new Big(0);
const netPerformancePercentageWithCurrencyEffectMap: {
[key: DateRange]: Big;
} = {};
const netPerformanceWithCurrencyEffectMap: {
[key: DateRange]: Big;
} = {};
for (const dateRange of [
'1d',
'1y',
'5y',
'max',
'mtd',
'wtd',
'ytd'
// TODO:
// ...eachYearOfInterval({ end, start })
// .filter((date) => {
// return !isThisYear(date);
// })
// .map((date) => {
// return format(date, 'yyyy');
// })
] as DateRange[]) {
const dateInterval = getIntervalFromDateRange(dateRange);
const endDate = dateInterval.endDate;
let startDate = dateInterval.startDate;
if (isBefore(startDate, start)) {
startDate = start;
}
const rangeEndDateString = format(endDate, DATE_FORMAT);
const rangeStartDateString = format(startDate, DATE_FORMAT);
const currentValuesAtDateRangeStartWithCurrencyEffect =
currentValuesWithCurrencyEffect[rangeStartDateString] ?? new Big(0);
const investmentValuesAccumulatedAtStartDateWithCurrencyEffect =
investmentValuesAccumulatedWithCurrencyEffect[rangeStartDateString] ??
new Big(0);
const grossPerformanceAtDateRangeStartWithCurrencyEffect =
currentValuesAtDateRangeStartWithCurrencyEffect.minus(
investmentValuesAccumulatedAtStartDateWithCurrencyEffect
);
let average = new Big(0);
let dayCount = 0;
for (let i = this.chartDates.length - 1; i >= 0; i -= 1) {
const date = this.chartDates[i];
if (date > rangeEndDateString) {
continue;
} else if (date < rangeStartDateString) {
break;
}
if (
investmentValuesAccumulatedWithCurrencyEffect[date] instanceof Big &&
investmentValuesAccumulatedWithCurrencyEffect[date].gt(0)
) {
average = average.add(
investmentValuesAccumulatedWithCurrencyEffect[date].add(
grossPerformanceAtDateRangeStartWithCurrencyEffect
)
);
dayCount++;
}
}
if (dayCount > 0) {
average = average.div(dayCount);
}
netPerformanceWithCurrencyEffectMap[dateRange] =
netPerformanceValuesWithCurrencyEffect[rangeEndDateString]?.minus(
// If the date range is 'max', take 0 as a start value. Otherwise,
// the value of the end of the day of the start date is taken which
// differs from the buying price.
dateRange === 'max'
? new Big(0)
: (netPerformanceValuesWithCurrencyEffect[rangeStartDateString] ??
new Big(0))
) ?? new Big(0);
netPerformancePercentageWithCurrencyEffectMap[dateRange] = average.gt(0)
? netPerformanceWithCurrencyEffectMap[dateRange].div(average)
: new Big(0);
}
if (PortfolioCalculator.ENABLE_LOGGING) {
console.log(
`
${symbol}
Unit price: ${orders[indexOfStartOrder].unitPrice.toFixed(
2
)} -> ${unitPriceAtEndDate.toFixed(2)}
Total investment: ${totalInvestment.toFixed(2)}
Total investment with currency effect: ${totalInvestmentWithCurrencyEffect.toFixed(
2
)}
Time weighted investment: ${timeWeightedAverageInvestmentBetweenStartAndEndDate.toFixed(
2
)}
Time weighted investment with currency effect: ${timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect.toFixed(
2
)}
Total dividend: ${totalDividend.toFixed(2)}
Gross performance: ${totalGrossPerformance.toFixed(
2
)} / ${grossPerformancePercentage.mul(100).toFixed(2)}%
Gross performance with currency effect: ${totalGrossPerformanceWithCurrencyEffect.toFixed(
2
)} / ${grossPerformancePercentageWithCurrencyEffect
.mul(100)
.toFixed(2)}%
Fees per unit: ${feesPerUnit.toFixed(2)}
Fees per unit with currency effect: ${feesPerUnitWithCurrencyEffect.toFixed(
2
)}
Net performance: ${totalNetPerformance.toFixed(
2
)} / ${netPerformancePercentage.mul(100).toFixed(2)}%
Net performance with currency effect: ${netPerformancePercentageWithCurrencyEffectMap[
'max'
].toFixed(2)}%`
);
}
return {
currentValues,
currentValuesWithCurrencyEffect,
feesWithCurrencyEffect,
grossPerformancePercentage,
grossPerformancePercentageWithCurrencyEffect,
initialValue,
initialValueWithCurrencyEffect,
investmentValuesAccumulated,
investmentValuesAccumulatedWithCurrencyEffect,
investmentValuesWithCurrencyEffect,
netPerformancePercentage,
netPerformancePercentageWithCurrencyEffectMap,
netPerformanceValues,
netPerformanceValuesWithCurrencyEffect,
netPerformanceWithCurrencyEffectMap,
timeWeightedInvestmentValues,
timeWeightedInvestmentValuesWithCurrencyEffect,
totalAccountBalanceInBaseCurrency,
totalDividend,
totalDividendInBaseCurrency,
totalInterest,
totalInterestInBaseCurrency,
totalInvestment,
totalInvestmentWithCurrencyEffect,
totalLiabilities,
totalLiabilitiesInBaseCurrency,
totalValuables,
totalValuablesInBaseCurrency,
grossPerformance: totalGrossPerformance,
grossPerformanceWithCurrencyEffect:
totalGrossPerformanceWithCurrencyEffect,
hasErrors: totalUnits.gt(0) && (!initialValue || !unitPriceAtEndDate),
netPerformance: totalNetPerformance,
timeWeightedInvestment:
timeWeightedAverageInvestmentBetweenStartAndEndDate,
timeWeightedInvestmentWithCurrencyEffect:
timeWeightedAverageInvestmentBetweenStartAndEndDateWithCurrencyEffect
};
throw new Error('Method not implemented.');
}
}

10
apps/api/src/app/portfolio/portfolio.service.ts

@ -295,7 +295,7 @@ export class PortfolioService {
activities,
filters,
userId,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: this.request.user.Settings.settings.baseCurrency
});
@ -372,7 +372,7 @@ export class PortfolioService {
activities,
filters,
userId,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: userCurrency
});
@ -680,7 +680,7 @@ export class PortfolioService {
const portfolioCalculator = this.calculatorFactory.createCalculator({
activities,
userId,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: userCurrency
});
@ -950,7 +950,7 @@ export class PortfolioService {
activities,
filters,
userId,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: this.request.user.Settings.settings.baseCurrency
});
@ -1116,7 +1116,7 @@ export class PortfolioService {
activities,
filters,
userId,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: userCurrency
});

684
apps/api/src/assets/cryptocurrencies/cryptocurrencies.json

File diff suppressed because it is too large

2
apps/api/src/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor.ts

@ -26,7 +26,7 @@ export class TransformDataSourceInRequestInterceptor<T>
const request = http.getRequest();
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
if (request.body.activities) {
if (request.body?.activities) {
request.body.activities = request.body.activities.map((activity) => {
if (DataSource[activity.dataSource]) {
return activity;

35
apps/api/src/main.ts

@ -1,3 +1,5 @@
import { STORYBOOK_PATH } from '@ghostfolio/common/config';
import {
Logger,
LogLevel,
@ -7,6 +9,7 @@ import {
import { ConfigService } from '@nestjs/config';
import { NestFactory } from '@nestjs/core';
import type { NestExpressApplication } from '@nestjs/platform-express';
import { NextFunction, Request, Response } from 'express';
import helmet from 'helmet';
import { AppModule } from './app/app.module';
@ -50,20 +53,24 @@ async function bootstrap() {
app.useBodyParser('json', { limit: '10mb' });
if (configService.get<string>('ENABLE_FEATURE_SUBSCRIPTION') === 'true') {
app.use(
helmet({
contentSecurityPolicy: {
directives: {
connectSrc: ["'self'", 'https://js.stripe.com'], // Allow connections to Stripe
frameSrc: ["'self'", 'https://js.stripe.com'], // Allow loading frames from Stripe
scriptSrc: ["'self'", "'unsafe-inline'", 'https://js.stripe.com'], // Allow inline scripts and scripts from Stripe
scriptSrcAttr: ["'self'", "'unsafe-inline'"], // Allow inline event handlers
styleSrc: ["'self'", "'unsafe-inline'"] // Allow inline styles
}
},
crossOriginOpenerPolicy: false // Disable Cross-Origin-Opener-Policy header (for Internet Identity)
})
);
app.use((req: Request, res: Response, next: NextFunction) => {
if (req.path.startsWith(STORYBOOK_PATH)) {
next();
} else {
helmet({
contentSecurityPolicy: {
directives: {
connectSrc: ["'self'", 'https://js.stripe.com'], // Allow connections to Stripe
frameSrc: ["'self'", 'https://js.stripe.com'], // Allow loading frames from Stripe
scriptSrc: ["'self'", "'unsafe-inline'", 'https://js.stripe.com'], // Allow inline scripts and scripts from Stripe
scriptSrcAttr: ["'self'", "'unsafe-inline'"], // Allow inline event handlers
styleSrc: ["'self'", "'unsafe-inline'"] // Allow inline styles
}
},
crossOriginOpenerPolicy: false // Disable Cross-Origin-Opener-Policy header (for Internet Identity)
})(req, res, next);
}
});
}
app.use(HtmlTemplateMiddleware);

2
apps/api/src/middlewares/html-template.middleware.ts

@ -3,6 +3,7 @@ import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import {
DEFAULT_LANGUAGE_CODE,
DEFAULT_ROOT_URL,
STORYBOOK_PATH,
SUPPORTED_LANGUAGE_CODES
} from '@ghostfolio/common/config';
import { DATE_FORMAT, interpolate } from '@ghostfolio/common/helper';
@ -129,6 +130,7 @@ export const HtmlTemplateMiddleware = async (
if (
path.startsWith('/api/') ||
path.startsWith(STORYBOOK_PATH) ||
isFileRequest(path) ||
!environment.production
) {

5
apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -41,9 +42,7 @@ export class AlphaVantageService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
return {
symbol,
dataSource: this.getName()

5
apps/api/src/services/data-provider/coingecko/coingecko.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -56,9 +57,7 @@ export class CoinGeckoService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
const response: Partial<SymbolProfile> = {
symbol,
assetClass: AssetClass.LIQUIDITY,

2
apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts

@ -170,6 +170,8 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
symbol = quotes[0].symbol;
}
} catch {}
} else if (symbol?.includes('-')) {
throw new Error(`${symbol} is not valid`);
} else {
symbol = this.convertToYahooFinanceSymbol(symbol);
}

5
apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -51,9 +52,7 @@ export class EodHistoricalDataService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
const [searchResult] = await this.getSearchResult(symbol);
return {

63
apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts

@ -2,6 +2,7 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con
import { CryptocurrencyService } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -11,6 +12,7 @@ import {
IDataProviderHistoricalResponse,
IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces';
import { REPLACE_NAME_PARTS } from '@ghostfolio/common/config';
import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper';
import {
DataProviderInfo,
@ -56,10 +58,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
}
public async getAssetProfile({
requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
const response: Partial<SymbolProfile> = {
symbol,
dataSource: this.getName()
@ -70,9 +71,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const [quote] = await fetch(
`${this.URL}/quote/${symbol}?apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -84,9 +83,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const [assetProfile] = await fetch(
`${this.URL}/profile/${symbol}?apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -100,9 +97,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const etfCountryWeightings = await fetch(
`${this.URL}/etf-country-weightings/${symbol}?apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -127,9 +122,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const [etfInformation] = await fetch(
`${this.getUrl({ version: 4 })}/etf-info?symbol=${symbol}&apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -140,9 +133,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const [portfolioDate] = await fetch(
`${this.getUrl({ version: 4 })}/etf-holdings/portfolio-date?symbol=${symbol}&apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -150,9 +141,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const etfHoldings = await fetch(
`${this.getUrl({ version: 4 })}/etf-holdings?date=${portfolioDate.date}&symbol=${symbol}&apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -170,9 +159,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
const etfSectorWeightings = await fetch(
`${this.URL}/etf-sector-weightings/${symbol}?apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json());
@ -200,7 +187,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
response.isin = assetProfile.isin;
}
response.name = assetProfile.companyName;
response.name = this.formatName({ name: assetProfile.companyName });
if (assetProfile.website) {
response.url = assetProfile.website;
@ -211,7 +198,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
if (error?.name === 'AbortError') {
message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${(
this.configurationService.get('REQUEST_TIMEOUT') / 1000
requestTimeout / 1000
).toFixed(3)} seconds`;
}
@ -244,7 +231,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
[date: string]: IDataProviderHistoricalResponse;
} = {};
const { historical } = await fetch(
const { historical = [] } = await fetch(
`${this.URL}/historical-price-full/stock_dividend/${symbol}?apikey=${this.apiKey}`,
{
signal: AbortSignal.timeout(requestTimeout)
@ -305,7 +292,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
? addYears(currentFrom, MAX_YEARS_PER_REQUEST)
: to;
const { historical } = await fetch(
const { historical = [] } = await fetch(
`${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}&from=${format(currentFrom, DATE_FORMAT)}&to=${format(currentTo, DATE_FORMAT)}`,
{
signal: AbortSignal.timeout(requestTimeout)
@ -376,7 +363,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
if (error?.name === 'AbortError') {
message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${(
this.configurationService.get('REQUEST_TIMEOUT') / 1000
requestTimeout / 1000
).toFixed(3)} seconds`;
}
@ -412,7 +399,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
assetSubClass: undefined, // TODO
dataProviderInfo: this.getDataProviderInfo(),
dataSource: this.getName(),
name: companyName
name: this.formatName({ name: companyName })
};
});
} else {
@ -428,12 +415,12 @@ export class FinancialModelingPrepService implements DataProviderInterface {
items = result.map(({ currency, name, symbol }) => {
return {
currency,
name,
symbol,
assetClass: undefined, // TODO
assetSubClass: undefined, // TODO
dataProviderInfo: this.getDataProviderInfo(),
dataSource: this.getName()
dataSource: this.getName(),
name: this.formatName({ name })
};
});
}
@ -452,6 +439,18 @@ export class FinancialModelingPrepService implements DataProviderInterface {
return { items };
}
private formatName({ name }: { name: string }) {
if (name) {
for (const part of REPLACE_NAME_PARTS) {
name = name.replace(part, '');
}
name = name.trim();
}
return name;
}
private getUrl({ version }: { version: number }) {
return `https://financialmodelingprep.com/api/v${version}`;
}

68
apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts

@ -2,6 +2,7 @@ import { environment } from '@ghostfolio/api/environments/environment';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -18,6 +19,7 @@ import {
} from '@ghostfolio/common/config';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
DataProviderGhostfolioAssetProfileResponse,
DataProviderInfo,
DividendsResponse,
HistoricalResponse,
@ -46,21 +48,46 @@ export class GhostfolioService implements DataProviderInterface {
}
public async getAssetProfile({
requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
const { items } = await this.search({ query: symbol });
const searchResult = items?.[0];
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
let response: DataProviderGhostfolioAssetProfileResponse = {};
return {
symbol,
assetClass: searchResult?.assetClass,
assetSubClass: searchResult?.assetSubClass,
currency: searchResult?.currency,
dataSource: this.getName(),
name: searchResult?.name
};
try {
const assetProfile = (await fetch(
`${this.URL}/v1/data-providers/ghostfolio/asset-profile/${symbol}`,
{
headers: await this.getRequestHeaders(),
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) =>
res.json()
)) as DataProviderGhostfolioAssetProfileResponse;
response = assetProfile;
} catch (error) {
let message = error;
if (error.name === 'AbortError') {
message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${(
requestTimeout / 1000
).toFixed(3)} seconds`;
} else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) {
message = 'RequestError: The daily request limit has been exceeded';
} else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) {
if (!error.request?.options?.headers?.authorization?.includes('-')) {
message =
'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.';
} else {
message =
'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.';
}
}
Logger.error(message, 'GhostfolioService');
}
return response;
}
public getDataProviderInfo(): DataProviderInfo {
@ -203,7 +230,7 @@ export class GhostfolioService implements DataProviderInterface {
if (error.name === 'AbortError') {
message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${(
this.configurationService.get('REQUEST_TIMEOUT') / 1000
requestTimeout / 1000
).toFixed(3)} seconds`;
} else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) {
message = 'RequestError: The daily request limit has been exceeded';
@ -224,10 +251,13 @@ export class GhostfolioService implements DataProviderInterface {
}
public getTestSymbol() {
return 'AAPL.US';
return 'AAPL';
}
public async search({ query }: GetSearchParams): Promise<LookupResponse> {
public async search({
requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
query
}: GetSearchParams): Promise<LookupResponse> {
let searchResult: LookupResponse = { items: [] };
try {
@ -235,9 +265,7 @@ export class GhostfolioService implements DataProviderInterface {
`${this.URL}/v2/data-providers/ghostfolio/lookup?query=${query}`,
{
headers: await this.getRequestHeaders(),
signal: AbortSignal.timeout(
this.configurationService.get('REQUEST_TIMEOUT')
)
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json())) as LookupResponse;
} catch (error) {
@ -245,7 +273,7 @@ export class GhostfolioService implements DataProviderInterface {
if (error.name === 'AbortError') {
message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${(
this.configurationService.get('REQUEST_TIMEOUT') / 1000
requestTimeout / 1000
).toFixed(3)} seconds`;
} else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) {
message = 'RequestError: The daily request limit has been exceeded';

5
apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -37,9 +38,7 @@ export class GoogleSheetsService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
return {
symbol,
dataSource: this.getName()

10
apps/api/src/services/data-provider/interfaces/data-provider.interface.ts

@ -15,9 +15,7 @@ export interface DataProviderInterface {
getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>>;
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>>;
getDataProviderInfo(): DataProviderInfo;
@ -55,6 +53,11 @@ export interface DataProviderInterface {
search({ includeIndices, query }: GetSearchParams): Promise<LookupResponse>;
}
export interface GetAssetProfileParams {
requestTimeout?: number;
symbol: string;
}
export interface GetDividendsParams {
from: Date;
granularity?: Granularity;
@ -79,5 +82,6 @@ export interface GetQuotesParams {
export interface GetSearchParams {
includeIndices?: boolean;
query: string;
requestTimeout?: number;
userId?: string;
}

5
apps/api/src/services/data-provider/manual/manual.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -43,9 +44,7 @@ export class ManualService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
const assetProfile: Partial<SymbolProfile> = {
symbol,
dataSource: this.getName()

5
apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts

@ -1,6 +1,7 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -33,9 +34,7 @@ export class RapidApiService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
return {
symbol,
dataSource: this.getName()

5
apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

@ -2,6 +2,7 @@ import { CryptocurrencyService } from '@ghostfolio/api/services/cryptocurrency/c
import { YahooFinanceDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service';
import {
DataProviderInterface,
GetAssetProfileParams,
GetDividendsParams,
GetHistoricalParams,
GetQuotesParams,
@ -43,9 +44,7 @@ export class YahooFinanceService implements DataProviderInterface {
public async getAssetProfile({
symbol
}: {
symbol: string;
}): Promise<Partial<SymbolProfile>> {
}: GetAssetProfileParams): Promise<Partial<SymbolProfile>> {
return this.yahooFinanceDataEnhancerService.getAssetProfile(symbol);
}

2
apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts

@ -68,7 +68,7 @@ export class PortfolioSnapshotProcessor {
const portfolioCalculator = this.calculatorFactory.createCalculator({
accountBalanceItems,
activities,
calculationType: PerformanceCalculationType.TWR,
calculationType: PerformanceCalculationType.ROAI,
currency: job.data.userCurrency,
filters: job.data.filters,
userId: job.data.userId

34
apps/client/localhost.cert

@ -1,18 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIC5TCCAc2gAwIBAgIJAJAMHOFnJ6oyMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0yNDAyMjcxNTQ2MzFaFw0yNDAzMjgxNTQ2MzFaMBQx
EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAJ0hRjViikEKVIyukXR4CfuYVvFEFzB6AwAQ9Jrz2MseqpLacLTXFFAS54mp
iDuqPBzs9ta40mlSrqSBuAWKikpW5kTNnmqUnDZ6iSJezbYWx9YyULGqqb1q3C4/
5pH9m6NHJ+2uaUNKlDxYNKbntqs3drQEdxH9yv672Z53nvogTcf9jz6zjutEQGSV
HgVkCTTQmzf3+3st+VJ5D8JeYFR+tpZ6yleqgXFaTMtPZRfKLvTkQ+KeyCJLnsUJ
BQvdCKI0PGsG6d6ygXFmSePolD9KW3VTKKDPCsndID89vAnRWDj9UhzvycxmKpcF
GrUPH5+Pis1PM1R7OnAvnFygnyECAwEAAaM6MDgwFAYDVR0RBA0wC4IJbG9jYWxo
b3N0MAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B
AQsFAAOCAQEAOdzrY3RTAPnBVAd3/GKIEkielYyOgKPnvd+RcOB+je8cXZY+vaxX
uEFP0526G00+kRZ2Tx9t0SmjoSpwg3lHUPMko0dIxgRlqISDAohdrEptHpcVujsD
ak88LLnAurr60JNjWX2wbEoJ18KLtqGSnATdmCgKwDPIN5a7+ssp44BGyzH6VYCg
wV3VjJl0pp4C5M0Jfu0p1FrQjzIVhgqR7JFYmvqIogWrGwYAQK/3XRXq8t48J5X3
IsfWiLAA2ZdCoWAnZ6PAGBOoGivtkJm967pHjd/28qYY6mQo4sN2ksEOjx6/YslF
2mOJdLV/DzqoggUsTpPEG0dRhzQLTGHKDQ==
MIIDSDCCAjACCQCQ2ForVhz+uDANBgkqhkiG9w0BAQsFADBmMQswCQYDVQQGEwJD
SDEOMAwGA1UECAwFU3RhdGUxDTALBgNVBAcMBENpdHkxFTATBgNVBAoMDE9yZ2Fu
aXphdGlvbjENMAsGA1UECwwEVW5pdDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1
MDMwOTE2MzQxM1oXDTI2MDMwOTE2MzQxM1owZjELMAkGA1UEBhMCQ0gxDjAMBgNV
BAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5MRUwEwYDVQQKDAxPcmdhbml6YXRpb24x
DTALBgNVBAsMBFVuaXQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMkJRKPgV8NDcoIakPc7sZVXQ9VK2PGb8+lF/1Lv
NcIZpD40+p4DzuEw0bjRn17IDClyLMaLbZNtIyTPSkFaffL+rJ0JvnKdG50s+HId
YNuCwKkgHg4hTXFzOPpT3HMG3UxyEwFOm25GMFiikfT96ukMAAkanMqYKZQOClRU
Cw4LP3g0Oks58obbRy4Wltp88K8LJrR+j81+AjElTIGXHhChXzV/NjJ14TMNy5hZ
lwV4xUSwvNqOvWGMIR7J77fINF130ghTSnvzCS52dCeom2I4Lvncz3m37lDttCOs
Wm/i651ro7pwFEs/lJmrnFHPtph2ayPcHBmrQCgLc5xMUMcCAwEAATANBgkqhkiG
9w0BAQsFAAOCAQEAhRA1/+Gl2VH34yN/FvrE5cY0W4ghSCuTdK9pGeo8AcN+TScU
7O+hVsEwZDrYKuDvG8Ab//A+uv5gbfGbYPJVIdJ3Q8HKijNZmbwAgANJU/c0WwOx
XBQ9mCzWRcJxQeUUgh4DT4lZCOfR5pIvAJpKScTcF/yp5gOgrgJH1GHFEYYPoXWO
ezPPMwCNbfamUPlZZnHu74fUrFrDPI9c/YSu8Ex/LegZXJAEzA+8I0g64rjGtzJp
fkRDyQcBuT5SVa+USBlALQmdIuT/fN6R729DcGzvV8JqdoG9sLra4hrRCn3+A3c9
izZguW1BQNQ2N7II6QCDnWkdUFSQCiQunX/xsg==
-----END CERTIFICATE-----

52
apps/client/localhost.pem

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCdIUY1YopBClSM
rpF0eAn7mFbxRBcwegMAEPSa89jLHqqS2nC01xRQEueJqYg7qjwc7PbWuNJpUq6k
gbgFiopKVuZEzZ5qlJw2eokiXs22FsfWMlCxqqm9atwuP+aR/ZujRyftrmlDSpQ8
WDSm57arN3a0BHcR/cr+u9med576IE3H/Y8+s47rREBklR4FZAk00Js39/t7LflS
eQ/CXmBUfraWespXqoFxWkzLT2UXyi705EPinsgiS57FCQUL3QiiNDxrBunesoFx
Zknj6JQ/Slt1UyigzwrJ3SA/PbwJ0Vg4/VIc78nMZiqXBRq1Dx+fj4rNTzNUezpw
L5xcoJ8hAgMBAAECggEAPU5YOEgELTA8oM8TjV+wdWuQsH2ilpVkSkhTR4nQkh+a
6cU0qDoqgLt/fySYNL9MyPRjso9V+SX7YdAC3paZMjwJh9q57lehQ1g33SMkG+Fz
gs0K0ucFZxQkaB8idN+ANAp1N7UO+ORGRe0cTeqmSNNRCxea5XgiFZVxaPS/IFOR
vVdXS1DulgwHh4H0ljKmkj7jc9zPBSc9ccW5Ml2q4a26Atu4IC/Mlp/DF4GNELbD
ebi9ZOZG33ip2bdhj3WX7NW9GJaaViKtVUpcpR6u+6BfvTXQ6xrqdoxXk9fnPzzf
sSoLPTt8yO4RavP1zQU22PhgIcWudhCiy/2Nv+uLqQKBgQDMPh1/xwdFl8yES8dy
f0xJyCDWPiB+xzGwcOAC90FrNZaqG0WWs3VHE4cilaWjCflvdR6aAEDEY68sZJhl
h+ChT/g61QLMOI+VIDQ1kJXKYgfS/B+BE1PZ0EkuymKFOvbNO8agHodB8CqnZaQh
bLuZaDnZ0JLK4im3KPt70+aKYwKBgQDE8s6xl0SLu+yJLo3VklCRD67Z8/jlvx2t
h3DF6NG8pB3QmvKdJWFKuLAWLGflJwbUW9Pt3hXkc0649KQrtiIYC0ZMh9KMaVCk
WmjS/n2eIUQZ7ZUlwFesi4p4iGynVBavIY8TJ6Y+K3TvsJgXP3IZ96r689PQJo8E
KbSeyYzFqwKBgGQTS4EAlJ+U8bEhMGj51veQCAbyChoUoFRD+n95h6RwbZKMKlzd
MenRt7VKfg6VJJNoX8Y1uYaBEaQ+5i1Zlsdz1718AhLu4+u+C9bzMXIo9ox63TTx
s3RWioVSxVNiwOtvDrQGQWAdvcioFPQLwyA34aDIgiTHDImimxbhjWThAoGAWOqW
Tq9QjxWk0Lpn5ohMP3GpK1VuhasnJvUDARb/uf8ORuPtrOz3Y9jGBvy9W0OnXbCn
mbiugZldbTtl8yYjdl+AuYSIlkPl2I3IzZl/9Shnqp0MvSJ9crT9KzXMeC8Knr6z
7Z30/BR6ksxTngtS5E5grzPt6Qe/gc2ich3kpEkCgYBfBHUhVIKVrDW/8a7U2679
Wj4i9us/M3iPMxcTv7/ZAg08TEvNBQYtvVQLu0NfDKXx8iGKJJ6evIYgNXVm2sPq
VzSgwGCALi1X0443amZU+mnX+/9RnBqyM+PJU8570mM83jqKlY/BEsi0aqxTioFG
an3xbjjN+Rq9iKLzmPxIMg==
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJCUSj4FfDQ3KC
GpD3O7GVV0PVStjxm/PpRf9S7zXCGaQ+NPqeA87hMNG40Z9eyAwpcizGi22TbSMk
z0pBWn3y/qydCb5ynRudLPhyHWDbgsCpIB4OIU1xczj6U9xzBt1MchMBTptuRjBY
opH0/erpDAAJGpzKmCmUDgpUVAsOCz94NDpLOfKG20cuFpbafPCvCya0fo/NfgIx
JUyBlx4QoV81fzYydeEzDcuYWZcFeMVEsLzajr1hjCEeye+3yDRdd9IIU0p78wku
dnQnqJtiOC753M95t+5Q7bQjrFpv4uuda6O6cBRLP5SZq5xRz7aYdmsj3BwZq0Ao
C3OcTFDHAgMBAAECggEBALJQqDN7QB0QbDb+fWrt5bwDJUXBF+BmZdiZn7jeOJ6r
w8TxlQIneo6/kKYQOP4HDtKMVS7eaRkFCtERlFmXfHPWdSDtjaF3vRCS3OPLLyhF
N8JLnJ0H6PsiKn3PeJAGnK+71yOnp7IOS7+yoyfdOUnwvO9WTZBdmzOZqIvX595R
g7R5yjSYjzFMmaCpyab6kiD7b4bHzDIrB0XuouT2W/fS/i1srwc3eDk78ZyioyiB
g6GDuOwqDfPmkUqKo2oXSoSR8yCwSSdlClc7aOowoNxbsksTDjXf1k02n0lG5MHU
ldCX02WdA0JFW8Os0Ig+YBq7wSkB5oNVt7gEek/MB0ECgYEA+ATkyfX9/5X2kUMY
MatUqKOvLUtyIfHeYUy/Dm+9JlZlrxD0dRAKWhnhRR16v5cwN2RVtEvMDsV1AGHN
e/fh315aAq+I6/eY6syXfkeHHs5UIRPrOlIcp1Ogfg99xpOT0/TZy9bB7lKvtYes
GmKO8n7md1TptdxilSNORI60KvECgYEAz4FX6vH76HgV/seY+vePrj5nFCZnDru7
16w5LYoHaX0hABJ0qZCqZozdPf9mqM5Ldc8PUbvVsFqXyaHwBAKUsH44a3aLxcXU
JMsQanU5I87SWP/S8Xu2Yxc10L66Oc5VdAeraZvb+wJqTkYKhDYOJVMjyuI/vkAw
fqMPI6wShzcCgYEAndYnb6uf4Eakap9jR0C8mLHKaq3nzVhqaEt6DwrnOf2jqnzE
xbbWj66GoQB4vHLP2YB91kaibwgURJD5PxpqYUdfSvRA08J3S322L0P/5ofyHDbb
7PqSh539thvPtE74tdvNux5Jvoxai9Dyorv0Mri1nF2qefTtu/GC/rg+SlECgYB2
FaYhhomTVls1/QIat6zlPI/OULhPExineFOljaoAJvwTnW0UXcYKy9jPgjs6jwM0
TJvsKFdHn5ZHYUdEEO/qrDmRNgn+h0Ddm02BN6pHrVfY2+SAFaXKKBgw7YjugnPw
rrimRdLeuhYi6wrrCBPuu6xftXcO3lp6hnKEG1UD6wKBgEh/C7HQ6cjb7Rr15eRq
2VOgeuz7o2v/OC+jO6yFGRrs2VKoBuJpw/6jx806Cbi2jLEwim21iNYW/2McOWP3
YUvni7qHXfll8d4sSAuCTA4K/N0MJ/3XbGBPDm/83J2o7uz2GFkQRruruaERvDMF
x26H2i3DOUFzdgbkoNB0ifHd
-----END PRIVATE KEY-----

44
apps/client/src/app/components/admin-overview/admin-overview.component.ts

@ -6,7 +6,6 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
PROPERTY_COUPONS,
PROPERTY_CURRENCIES,
PROPERTY_IS_DATA_GATHERING_ENABLED,
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED,
@ -41,8 +40,6 @@ import { takeUntil } from 'rxjs/operators';
export class AdminOverviewComponent implements OnDestroy, OnInit {
public couponDuration: StringValue = '14 days';
public coupons: Coupon[];
public customCurrencies: string[];
public exchangeRates: { label1: string; label2: string; value: number }[];
public hasPermissionForSubscription: boolean;
public hasPermissionForSystemMessage: boolean;
public hasPermissionToToggleReadOnlyMode: boolean;
@ -138,19 +135,6 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
});
}
public onDeleteCurrency(aCurrency: string) {
this.notificationService.confirm({
confirmFn: () => {
const currencies = this.customCurrencies.filter((currency) => {
return currency !== aCurrency;
});
this.putAdminSetting({ key: PROPERTY_CURRENCIES, value: currencies });
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this currency?`
});
}
public onDeleteSystemMessage() {
this.notificationService.confirm({
confirmFn: () => {
@ -231,25 +215,17 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
this.adminService
.fetchAdminData()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(
({ exchangeRates, settings, transactionCount, userCount, version }) => {
this.coupons = (settings[PROPERTY_COUPONS] as Coupon[]) ?? [];
this.customCurrencies = settings[PROPERTY_CURRENCIES] as string[];
this.exchangeRates = exchangeRates;
this.isDataGatheringEnabled =
settings[PROPERTY_IS_DATA_GATHERING_ENABLED] === false
? false
: true;
this.systemMessage = settings[
PROPERTY_SYSTEM_MESSAGE
] as SystemMessage;
this.transactionCount = transactionCount;
this.userCount = userCount;
this.version = version;
.subscribe(({ settings, transactionCount, userCount, version }) => {
this.coupons = (settings[PROPERTY_COUPONS] as Coupon[]) ?? [];
this.isDataGatheringEnabled =
settings[PROPERTY_IS_DATA_GATHERING_ENABLED] === false ? false : true;
this.systemMessage = settings[PROPERTY_SYSTEM_MESSAGE] as SystemMessage;
this.transactionCount = transactionCount;
this.userCount = userCount;
this.version = version;
this.changeDetectorRef.markForCheck();
}
);
this.changeDetectorRef.markForCheck();
});
}
private generateCouponCode(aLength: number) {

67
apps/client/src/app/components/admin-overview/admin-overview.html

@ -30,73 +30,6 @@
}
</div>
</div>
<div class="align-items-start d-flex my-3">
<div class="w-50" i18n>Exchange Rates</div>
<div class="w-50">
<table>
@for (exchangeRate of exchangeRates; track exchangeRate) {
<tr>
<td>
<gf-value [locale]="user?.settings?.locale" [value]="1" />
</td>
<td class="pl-1">{{ exchangeRate.label1 }}</td>
<td class="px-1">=</td>
<td align="right">
<gf-value
class="d-inline-block"
[locale]="user?.settings?.locale"
[precision]="4"
[value]="exchangeRate.value"
/>
</td>
<td class="pl-1">{{ exchangeRate.label2 }}</td>
<td>
<button
class="mx-1 no-min-width px-2"
mat-button
[matMenuTriggerFor]="exchangeRateActionsMenu"
(click)="$event.stopPropagation()"
>
<ion-icon name="ellipsis-horizontal" />
</button>
<mat-menu
#exchangeRateActionsMenu="matMenu"
class="h-100 mx-1 no-min-width px-2"
xPosition="before"
>
<a
mat-menu-item
[queryParams]="{
assetProfileDialog: true,
dataSource: exchangeRate.dataSource,
symbol: exchangeRate.symbol
}"
[routerLink]="['/admin', 'market-data']"
>
<span class="align-items-center d-flex">
<ion-icon class="mr-2" name="create-outline" />
<span i18n>Edit</span>
</span>
</a>
@if (customCurrencies.includes(exchangeRate.label2)) {
<hr class="m-0" />
<button
mat-menu-item
(click)="onDeleteCurrency(exchangeRate.label2)"
>
<span class="align-items-center d-flex">
<ion-icon class="mr-2" name="trash-outline" />
<span i18n>Delete</span>
</span>
</button>
}
</mat-menu>
</td>
</tr>
}
</table>
</div>
</div>
<div class="d-flex my-3">
<div class="w-50" i18n>User Signup</div>
<div class="w-50">

2
apps/client/src/app/components/header/header.component.html

@ -134,7 +134,7 @@
</button>
<mat-menu
#assistantMenu="matMenu"
class="assistant"
class="no-max-width"
xPosition="before"
[overlapTrigger]="true"
(closed)="assistantElement?.setIsOpen(false)"

4
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html

@ -117,8 +117,8 @@
<ng-container i18n>Net Performance</ng-container>
<abbr
class="initialism ml-2 text-muted"
title="Time-Weighted Rate of Return"
>(TWR)</abbr
title="Return on Average Investment"
>(ROAI)</abbr
>
</div>
<div class="flex-column flex-wrap justify-content-end">

2
apps/client/src/app/components/rule/rule.component.scss

@ -2,7 +2,7 @@
display: block;
.icon-container {
background-color: rgba(var(--dark-primary-text), 0.05);
background-color: rgba(var(--palette-foreground-base), 0.02);
border-radius: 0.25rem;
height: 2rem;

4
apps/client/src/app/pages/api/api-page.component.ts

@ -40,8 +40,8 @@ export class GfApiPageComponent implements OnInit {
this.apiKey = prompt($localize`Please enter your Ghostfolio API key:`);
this.dividends$ = this.fetchDividends({ symbol: 'KO' });
this.historicalData$ = this.fetchHistoricalData({ symbol: 'AAPL.US' });
this.quotes$ = this.fetchQuotes({ symbols: ['AAPL.US', 'VOO.US'] });
this.historicalData$ = this.fetchHistoricalData({ symbol: 'AAPL' });
this.quotes$ = this.fetchQuotes({ symbols: ['AAPL', 'VOO.US'] });
this.status$ = this.fetchStatus();
this.symbols$ = this.fetchSymbols({ query: 'apple' });
}

5
apps/client/src/app/pages/portfolio/activities/activities-page.html

@ -6,9 +6,8 @@
[baseCurrency]="user?.settings?.baseCurrency"
[dataSource]="dataSource"
[deviceType]="deviceType"
[hasPermissionToCreateActivity]="
hasPermissionToCreateActivity && user?.activitiesCount === 0
"
[hasActivities]="user?.activitiesCount > 0"
[hasPermissionToCreateActivity]="hasPermissionToCreateActivity"
[hasPermissionToDeleteActivity]="hasPermissionToDeleteActivity"
[hasPermissionToExportActivities]="!hasImpersonationId"
[locale]="user?.settings?.locale"

33
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts

@ -12,11 +12,18 @@ import {
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GroupBy } from '@ghostfolio/common/types';
import type { AiPromptMode, GroupBy } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { Clipboard } from '@angular/cdk/clipboard';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import {
ChangeDetectorRef,
Component,
OnDestroy,
OnInit,
ViewChild
} from '@angular/core';
import { MatMenuTrigger } from '@angular/material/menu';
import { MatSnackBar } from '@angular/material/snack-bar';
import { SymbolProfile } from '@prisma/client';
import { isNumber, sortBy } from 'lodash';
@ -32,6 +39,8 @@ import { takeUntil } from 'rxjs/operators';
standalone: false
})
export class AnalysisPageComponent implements OnDestroy, OnInit {
@ViewChild(MatMenuTrigger) actionsMenuButton!: MatMenuTrigger;
public benchmark: Partial<SymbolProfile>;
public benchmarkDataItems: HistoricalDataItem[] = [];
public benchmarks: Partial<SymbolProfile>[];
@ -46,10 +55,12 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
public investments: InvestmentItem[];
public investmentTimelineDataLabel = $localize`Investment`;
public investmentsByGroup: InvestmentItem[];
public isLoadingAnalysisPrompt: boolean;
public isLoadingBenchmarkComparator: boolean;
public isLoadingDividendTimelineChart: boolean;
public isLoadingInvestmentChart: boolean;
public isLoadingInvestmentTimelineChart: boolean;
public isLoadingPortfolioPrompt: boolean;
public mode: GroupBy = 'month';
public modeOptions: ToggleOption[] = [
{ label: $localize`Monthly`, value: 'month' },
@ -142,9 +153,15 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
this.fetchDividendsAndInvestments();
}
public onCopyPromptToClipboard() {
public onCopyPromptToClipboard(mode: AiPromptMode) {
if (mode === 'analysis') {
this.isLoadingAnalysisPrompt = true;
} else if (mode === 'portfolio') {
this.isLoadingPortfolioPrompt = true;
}
this.dataService
.fetchPrompt()
.fetchPrompt(mode)
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ prompt }) => {
this.clipboard.copy(prompt);
@ -163,6 +180,14 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
.subscribe(() => {
window.open('https://duck.ai', '_blank');
});
this.actionsMenuButton.closeMenu();
if (mode === 'analysis') {
this.isLoadingAnalysisPrompt = false;
} else if (mode === 'portfolio') {
this.isLoadingPortfolioPrompt = false;
}
});
}

72
apps/client/src/app/pages/portfolio/analysis/analysis-page.html

@ -5,6 +5,7 @@
<div class="col-lg">
<div class="d-flex justify-content-end">
<button
#actionsMenuButton
class="mx-1 no-min-width px-2"
mat-stroked-button
[matMenuTriggerFor]="actionsMenu"
@ -12,21 +13,62 @@
>
<ion-icon name="ellipsis-vertical" />
</button>
<mat-menu #actionsMenu="matMenu" xPosition="before">
<button
mat-menu-item
[disabled]="!hasPermissionToReadAiPrompt"
(click)="onCopyPromptToClipboard()"
>
<span class="align-items-center d-flex">
@if (user?.subscription?.type === 'Basic') {
<gf-premium-indicator class="mr-2" />
} @else {
<ion-icon class="mr-2" name="copy-outline" />
}
<ng-container i18n>Copy AI prompt to clipboard</ng-container>
</span>
</button>
<mat-menu
#actionsMenu="matMenu"
class="no-max-width"
xPosition="before"
>
<div (click)="$event.stopPropagation()">
<button
mat-menu-item
[disabled]="!hasPermissionToReadAiPrompt"
(click)="onCopyPromptToClipboard('portfolio')"
>
<span class="align-items-center d-flex">
@if (user?.subscription?.type === 'Basic') {
<gf-premium-indicator class="mr-2" />
} @else {
@if (isLoadingPortfolioPrompt) {
<mat-spinner
class="mr-2"
color="accent"
[diameter]="16"
/>
} @else {
<ion-icon class="mr-2" name="copy-outline" />
}
}
<ng-container i18n
>Copy portfolio data to clipboard for AI
prompt</ng-container
>
</span>
</button>
<button
mat-menu-item
[disabled]="!hasPermissionToReadAiPrompt"
(click)="onCopyPromptToClipboard('analysis')"
>
<span class="align-items-center d-flex">
@if (user?.subscription?.type === 'Basic') {
<gf-premium-indicator class="mr-2" />
} @else {
@if (isLoadingAnalysisPrompt) {
<mat-spinner
class="mr-2"
color="accent"
[diameter]="16"
/>
} @else {
<ion-icon class="mr-2" name="copy-outline" />
}
}
<ng-container i18n
>Copy AI prompt to clipboard for analysis</ng-container
>
</span>
</button>
</div>
</mat-menu>
</div>
</div>

2
apps/client/src/app/pages/portfolio/analysis/analysis-page.module.ts

@ -10,6 +10,7 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatMenuModule } from '@angular/material/menu';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { AnalysisPageRoutingModule } from './analysis-page-routing.module';
@ -29,6 +30,7 @@ import { AnalysisPageComponent } from './analysis-page.component';
MatButtonModule,
MatCardModule,
MatMenuModule,
MatProgressSpinnerModule,
NgxSkeletonLoaderModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]

63
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html

@ -7,23 +7,58 @@
risks in your portfolio. Adjust the rules below and set custom
thresholds to align with your personal investment strategy.
</p>
<p class="mb-4">
<div class="d-flex pb-3">
@if (isLoading) {
<ngx-skeleton-loader
animation="pulse"
class="w-100"
[theme]="{
height: '1rem',
width: '100%'
}"
/>
<div class="d-flex">
<ngx-skeleton-loader
animation="pulse"
class="mr-2"
[theme]="{
height: '2rem',
width: '2rem'
}"
/>
<ngx-skeleton-loader
animation="pulse"
class="mt-2 mb-1"
[theme]="{
height: '1rem',
width: '15rem'
}"
/>
</div>
} @else {
{{ statistics?.rulesFulfilledCount }}
<ng-container i18n>out of</ng-container>
{{ statistics?.rulesActiveCount }}
<ng-container i18n>rules align with your portfolio.</ng-container>
<div
class="align-items-center d-flex icon-container mr-2 px-2"
[ngClass]="{
okay:
statistics?.rulesFulfilledCount ===
statistics?.rulesActiveCount,
warn:
statistics?.rulesFulfilledCount !== statistics?.rulesActiveCount
}"
>
@if (
statistics?.rulesActiveCount === 0 ||
statistics?.rulesFulfilledCount === 0
) {
<ion-icon class="text-muted" name="remove-circle-outline" />
} @else if (
statistics?.rulesFulfilledCount === statistics?.rulesActiveCount
) {
<ion-icon name="checkmark-circle-outline" />
} @else {
<ion-icon name="warning-outline" />
}
</div>
<div class="d-flex align-items-center">
<ng-container>{{ statistics?.rulesFulfilledCount }} </ng-container>
<ng-container i18n>out of</ng-container>
{{ statistics?.rulesActiveCount }}
<ng-container i18n>rules align with your portfolio.</ng-container>
</div>
}
</p>
</div>
<div
class="mb-4"
[ngClass]="{

14
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.scss

@ -1,3 +1,17 @@
:host {
display: block;
.icon-container {
background-color: rgba(var(--palette-foreground-base), 0.02);
border-radius: 0.25rem;
height: 2rem;
&.okay {
color: var(--success);
}
&.warn {
color: var(--danger);
}
}
}

32
apps/client/src/app/pages/register/register-page.component.ts

@ -7,7 +7,6 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { Router } from '@angular/router';
import { Role } from '@prisma/client';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@ -59,43 +58,28 @@ export class RegisterPageComponent implements OnDestroy, OnInit {
);
}
public async createAccount() {
this.dataService
.postUser()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ accessToken, authToken, role }) => {
this.openShowAccessTokenDialog(accessToken, authToken, role);
});
}
public async onLoginWithInternetIdentity() {
try {
const { authToken } = await this.internetIdentityService.login();
this.tokenStorageService.saveToken(authToken);
this.router.navigate(['/']);
await this.router.navigate(['/']);
} catch {}
}
public openShowAccessTokenDialog(
accessToken: string,
authToken: string,
role: Role
) {
public openShowAccessTokenDialog() {
const dialogRef = this.dialog.open(ShowAccessTokenDialog, {
data: {
accessToken,
authToken,
role
},
disableClose: true,
width: '30rem'
height: this.deviceType === 'mobile' ? '98vh' : undefined,
width: this.deviceType === 'mobile' ? '100vw' : '30rem'
});
dialogRef
.afterClosed()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe((data) => {
if (data?.authToken) {
.subscribe((authToken) => {
if (authToken) {
this.tokenStorageService.saveToken(authToken, true);
this.router.navigate(['/']);

2
apps/client/src/app/pages/register/register-page.html

@ -22,7 +22,7 @@
class="d-inline-block"
color="primary"
mat-flat-button
(click)="createAccount()"
(click)="openShowAccessTokenDialog()"
>
<ng-container i18n>Create Account</ng-container>
</button>

57
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts

@ -1,19 +1,58 @@
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { DataService } from '@ghostfolio/client/services/data.service';
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
ViewChild
} from '@angular/core';
import { MatStepper } from '@angular/material/stepper';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'gf-show-access-token-dialog',
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'gf-show-access-token-dialog',
standalone: false,
styleUrls: ['./show-access-token-dialog.scss'],
templateUrl: 'show-access-token-dialog.html',
standalone: false
templateUrl: 'show-access-token-dialog.html'
})
export class ShowAccessTokenDialog {
public isAgreeButtonDisabled = true;
@ViewChild(MatStepper) stepper!: MatStepper;
public accessToken: string;
public authToken: string;
public isCreateAccountButtonDisabled = true;
public isDisclaimerChecked = false;
public role: string;
private unsubscribeSubject = new Subject<void>();
public constructor(
private changeDetectorRef: ChangeDetectorRef,
private dataService: DataService
) {}
public constructor(@Inject(MAT_DIALOG_DATA) public data: any) {}
public createAccount() {
this.dataService
.postUser()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ accessToken, authToken, role }) => {
this.accessToken = accessToken;
this.authToken = authToken;
this.role = role;
this.stepper.next();
this.changeDetectorRef.markForCheck();
});
}
public enableCreateAccountButton() {
this.isCreateAccountButtonDisabled = false;
}
public enableAgreeButton() {
this.isAgreeButtonDisabled = false;
public onChangeDislaimerChecked() {
this.isDisclaimerChecked = !this.isDisclaimerChecked;
}
}

125
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html

@ -1,48 +1,93 @@
<h1 mat-dialog-title>
<span i18n>Create Account</span>
@if (data.role === 'ADMIN') {
<span class="badge badge-light ml-2">{{ data.role }}</span>
@if (role === 'ADMIN') {
<span class="badge badge-light ml-2">{{ role }}</span>
}
</h1>
<div class="py-3" mat-dialog-content>
<div>
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Security Token</mat-label>
<textarea
cdkTextareaAutosize
matInput
readonly
type="text"
[(value)]="data.accessToken"
></textarea>
<div class="float-right mt-3">
<button
color="secondary"
mat-flat-button
[cdkCopyToClipboard]="data.accessToken"
(click)="enableAgreeButton()"
<div class="px-0" mat-dialog-content>
<mat-stepper #stepper animationDuration="0ms" linear>
<mat-step editable="false" [completed]="isDisclaimerChecked">
<ng-template i18n matStepLabel>Terms and Conditions</ng-template>
<div class="pt-2">
<ng-container i18n
>Please keep your security token safe. If you lose it, you will not be
able to recover your account.</ng-container
>
<ion-icon class="mr-1" name="copy-outline" /><span i18n
>Copy to clipboard</span
</div>
<mat-checkbox
class="pt-2"
color="primary"
(change)="onChangeDislaimerChecked()"
>
<ng-container i18n
>I understand that if I lose my security token, I cannot recover my
account.</ng-container
>
</mat-checkbox>
<div class="mt-3" mat-dialog-actions>
<div class="flex-grow-1">
<button i18n mat-button [mat-dialog-close]="undefined">Cancel</button>
</div>
<div>
<button
color="primary"
mat-flat-button
[disabled]="!isDisclaimerChecked"
(click)="createAccount()"
>
</button>
<ng-container i18n>Continue</ng-container>
</button>
</div>
</div>
</mat-form-field>
</div>
<p i18n>
I agree to have stored my <i>Security Token</i> from above in a secure
place. If I lose it, I cannot get my account back.
</p>
</div>
<div class="justify-content-end" mat-dialog-actions>
<button i18n mat-flat-button [mat-dialog-close]="undefined">Cancel</button>
<button
color="primary"
mat-flat-button
[disabled]="isAgreeButtonDisabled"
[mat-dialog-close]="data"
>
<span i18n>Agree and continue</span>
<ion-icon class="ml-1" name="arrow-forward-outline" />
</button>
</mat-step>
<mat-step editable="false">
<ng-template i18n matStepLabel>Security Token</ng-template>
<div class="pt-2">
<ng-container i18n
>Here is your security token. It is only visible once, please store
and keep it in a safe place.</ng-container
>
</div>
<mat-form-field appearance="outline" class="pt-3 w-100 without-hint">
<mat-label i18n>Security Token</mat-label>
<textarea
cdkTextareaAutosize
matInput
readonly
type="text"
[(value)]="accessToken"
></textarea>
<div class="float-right mt-1">
<button
color="secondary"
mat-flat-button
[cdkCopyToClipboard]="accessToken"
(click)="enableCreateAccountButton()"
>
<ion-icon class="mr-1" name="copy-outline" />
<span i18n>Copy to clipboard</span>
</button>
</div>
</mat-form-field>
<div align="end" class="mt-1" mat-dialog-actions>
<div>
<button
color="primary"
mat-flat-button
matStepperNext
[disabled]="isCreateAccountButtonDisabled"
[mat-dialog-close]="authToken"
>
<span i18n>Create Account</span>
<ion-icon class="ml-1" name="arrow-forward-outline" />
</button>
</div>
</div>
</mat-step>
<ng-template matStepperIcon="done">
<ion-icon name="checkmark-outline"></ion-icon>
</ng-template>
</mat-stepper>
<div></div>
</div>

4
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.module.ts

@ -4,9 +4,11 @@ import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatDialogModule } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatStepperModule } from '@angular/material/stepper';
import { ShowAccessTokenDialog } from './show-access-token-dialog.component';
@ -17,9 +19,11 @@ import { ShowAccessTokenDialog } from './show-access-token-dialog.component';
CommonModule,
FormsModule,
MatButtonModule,
MatCheckboxModule,
MatDialogModule,
MatFormFieldModule,
MatInputModule,
MatStepperModule,
ReactiveFormsModule,
TextFieldModule
],

4
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.scss

@ -1,2 +1,6 @@
:host {
.mat-mdc-dialog-actions {
padding-left: 0 !important;
padding-right: 0 !important;
}
}

11
apps/client/src/app/services/data.service.ts

@ -45,7 +45,12 @@ import {
User
} from '@ghostfolio/common/interfaces';
import { filterGlobalPermissions } from '@ghostfolio/common/permissions';
import { AccountWithValue, DateRange, GroupBy } from '@ghostfolio/common/types';
import type {
AccountWithValue,
AiPromptMode,
DateRange,
GroupBy
} from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { HttpClient, HttpParams } from '@angular/common/http';
@ -646,8 +651,8 @@ export class DataService {
return this.http.get<PortfolioReportResponse>('/api/v1/portfolio/report');
}
public fetchPrompt() {
return this.http.get<AiPromptResponse>('/api/v1/ai/prompt');
public fetchPrompt(mode: AiPromptMode) {
return this.http.get<AiPromptResponse>(`/api/v1/ai/prompt/${mode}`);
}
public fetchPublicPortfolio(aAccessId: string) {

6
apps/client/src/app/services/web-authn.service.ts

@ -45,7 +45,7 @@ export class WebAuthnService {
return of(null);
}),
switchMap((attOps) => {
return startRegistration(attOps);
return startRegistration({ optionsJSON: attOps });
}),
switchMap((credential) => {
return this.http.post<AuthDeviceDto>(
@ -89,8 +89,8 @@ export class WebAuthnService {
{ deviceId }
)
.pipe(
switchMap((requestOptionsJSON) => {
return startAuthentication(requestOptionsJSON);
switchMap((optionsJSON) => {
return startAuthentication({ optionsJSON });
}),
switchMap((credential) => {
return this.http.post<{ authToken: string }>(

292
apps/client/src/locales/messages.ca.xlf

@ -52,6 +52,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="41d338980f469b334618a07e799b4aa40fcf4834" datatype="html">
<source>Personal Finance</source>
@ -1181,10 +1185,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -1215,11 +1215,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1487,7 +1483,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -1723,7 +1719,7 @@
<target state="translated">Realment vol eliminar el perfil d’aquest actiu?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="3514960995395821133" datatype="html">
@ -1731,7 +1727,7 @@
<target state="translated">Realment vol eliminar aquests perfils?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -1739,7 +1735,7 @@
<target state="translated">Oooh! No s’han pogut eliminar els perfils</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -1963,15 +1959,7 @@
<target state="translated">Està segur qeu vol eliminar aquest cupó?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Està segur que vol eliminar aquesta divisa?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1979,7 +1967,7 @@
<target state="translated">Està segur que vol eliminar aquest missatge del sistema?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1987,7 +1975,7 @@
<target state="translated">Està segur que vol depurar el cache?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1995,7 +1983,7 @@
<target state="translated">Si us plau, afegeixi el seu missatge del sistema:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -2030,14 +2018,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Tipus de Canvi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Afegir Divisa</target>
@ -2051,7 +2031,7 @@
<target state="translated">Registrar Usuari</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -2059,7 +2039,7 @@
<target state="translated">Mode Només Lecutra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="4f986b5ab20fe31ca54d7345a73b6b2402ddd350" datatype="html">
@ -2067,7 +2047,7 @@
<target state="translated">Recollida de Dades</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
@ -2075,7 +2055,7 @@
<target state="translated">Missatge del Sistema</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -2083,7 +2063,7 @@
<target state="translated">Estableix el Missatge</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -2091,7 +2071,7 @@
<target state="translated">Coupons</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -2099,7 +2079,7 @@
<target state="translated">Afegir</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -2111,7 +2091,7 @@
<target state="translated">Ordre</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -2119,7 +2099,7 @@
<target state="translated">Depurar el Cache</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="e587f3aaad8881a0b7732fb3e86df8a4c91f25d2" datatype="html">
@ -2603,7 +2583,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">
@ -2671,7 +2651,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2683,7 +2663,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -2815,7 +2795,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -2975,7 +2959,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -5055,7 +5039,7 @@
<target state="new">Dividend</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5067,11 +5051,11 @@
<target state="new">Investment</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -5083,7 +5067,7 @@
<target state="new">Monthly</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
@ -5091,7 +5075,7 @@
<target state="new">Yearly</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -5107,7 +5091,7 @@
<target state="new">Absolute Asset Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -5115,7 +5099,7 @@
<target state="new"> Asset Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -5123,7 +5107,7 @@
<target state="new">Absolute Currency Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -5131,7 +5115,7 @@
<target state="new"> Currency Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -5139,7 +5123,7 @@
<target state="new"> Absolute Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -5147,7 +5131,7 @@
<target state="new"> Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="6ae1c94f6bad274424f97e9bc8766242c1577447" datatype="html">
@ -5155,7 +5139,7 @@
<target state="new">Top</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -5163,7 +5147,7 @@
<target state="new">Bottom</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -5171,7 +5155,7 @@
<target state="new">Portfolio Evolution</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -5179,7 +5163,7 @@
<target state="new">Investment Timeline</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
@ -5187,7 +5171,7 @@
<target state="new">Current Streak</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -5195,7 +5179,7 @@
<target state="new">Longest Streak</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
@ -5203,7 +5187,7 @@
<target state="new">Dividend Timeline</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -5243,7 +5227,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5251,7 +5235,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="5080775557941296581" datatype="html">
@ -5507,23 +5491,7 @@
<target state="new">Copy to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="new"> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="new">Agree and continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="1914201149277662818" datatype="html">
@ -5595,7 +5563,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -6023,7 +5991,7 @@
<target state="new">Do you really want to delete these activities?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="670983159637074283" datatype="html">
@ -6031,7 +5999,7 @@
<target state="new">Do you really want to delete this activity?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="4149127798893455354" datatype="html">
@ -6391,7 +6359,7 @@
<target state="new">Japan</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -6683,7 +6651,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6691,7 +6659,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6699,7 +6667,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6867,7 +6835,7 @@
<target state="new">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="new">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="new">Belgium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="new">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="new">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="new">Czech Republic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="new">Finland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="new">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="new">Germany</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="new">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="new">Italy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="new">Netherlands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="new">New Zealand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="new">Poland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="new">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="new">South Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="new">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.de.xlf

@ -16,6 +16,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
<source>The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.</source>
@ -260,10 +264,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -294,11 +294,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -530,7 +526,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -622,15 +618,7 @@
<target state="translated">Möchtest du diesen Gutscheincode wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Möchtest du diese Währung wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -638,7 +626,7 @@
<target state="translated">Möchtest du den Cache wirklich leeren?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -646,7 +634,7 @@
<target state="translated">Bitte gebe deine Systemmeldung ein:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -693,14 +681,6 @@
<context context-type="linenumber">45</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Wechselkurse</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Währung hinzufügen</target>
@ -714,7 +694,7 @@
<target state="translated">Systemmeldung</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -722,7 +702,7 @@
<target state="translated">Systemmeldung setzen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -730,7 +710,7 @@
<target state="translated">Lese-Modus</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -738,7 +718,7 @@
<target state="translated">Gutscheincodes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -746,7 +726,7 @@
<target state="translated">Hinzufügen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -758,7 +738,7 @@
<target state="translated">Verwaltung</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -766,7 +746,7 @@
<target state="translated">Cache leeren</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1082,7 +1062,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -1242,7 +1226,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -2134,7 +2118,7 @@
<target state="translated">Zeitstrahl der Investitionen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="6ae1c94f6bad274424f97e9bc8766242c1577447" datatype="html">
@ -2142,7 +2126,7 @@
<target state="translated">Gewinner</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -2150,7 +2134,7 @@
<target state="translated">Verlierer</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -2454,23 +2438,7 @@
<target state="translated">In die Zwischenablage kopieren</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated"> Ich stimme zu, meinen <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> an einem sicheren Ort hinterlegt zu haben. Sollte ich diesen verlieren, kann ich mein Konto nicht wiederherstellen. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Zustimmen und fortfahren</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="2446117790692479672" datatype="html">
@ -2566,7 +2534,7 @@
<target state="translated">Möchtest du diese Aktivität wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2794,7 +2762,7 @@
<target state="translated">Monatlich</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="5213771062241898526" datatype="html">
@ -2850,7 +2818,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2862,7 +2830,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -2986,7 +2954,7 @@
<target state="translated">Portfolio Wertentwicklung</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="8192718423057883427" datatype="html">
@ -3306,7 +3274,7 @@
<target state="translated">Zeitstrahl der Dividenden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="7765499580020598783" datatype="html">
@ -3314,7 +3282,7 @@
<target state="translated">Dividenden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -3334,7 +3302,7 @@
<target state="translated">Benutzer Registrierung</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
@ -3422,7 +3390,7 @@
<target state="translated">Jährlich</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
@ -3758,7 +3726,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -3942,7 +3910,7 @@
<target state="translated">Möchtest du diese Aktivitäten wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
@ -4170,7 +4138,7 @@
<target state="translated">Aktueller Streak</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4178,7 +4146,7 @@
<target state="translated">Längster Streak</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
@ -4658,7 +4626,7 @@
<target state="translated">Japan</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
@ -5759,7 +5727,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5903,7 +5871,7 @@
<target state="translated">Währungsklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5911,7 +5879,7 @@
<target state="translated">Kontoklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6031,7 +5999,7 @@
<target state="translated">Möchtest du dieses Anlageprofil wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6111,7 +6079,7 @@
<target state="translated">Extreme Angst</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6119,7 +6087,7 @@
<target state="translated">Extreme Gier</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6127,7 +6095,7 @@
<target state="translated">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6143,7 +6111,7 @@
<target state="translated">Möchtest du diese Systemmeldung wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6299,11 +6267,11 @@
<target state="translated">Einlage</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6315,7 +6283,7 @@
<target state="translated"> Absolute Anlage Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6323,7 +6291,7 @@
<target state="translated"> Anlage Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6331,7 +6299,7 @@
<target state="translated"> Absolute Währungsperformance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6339,7 +6307,7 @@
<target state="translated"> Währungsperformance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6347,7 +6315,7 @@
<target state="translated"> Absolute Netto Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6355,7 +6323,7 @@
<target state="translated"> Netto Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6463,7 +6431,7 @@
<target state="translated">Daten einholen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6715,7 +6683,7 @@
<target state="translated">Möchtest du diese Profile wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6723,7 +6691,7 @@
<target state="translated">Ups! Die Profile konnten nicht gelöscht werden.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6867,7 +6835,7 @@
<target state="translated">Australien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="translated">Österreich</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="translated">Belgien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="translated">Bulgarien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="translated">Kanada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="translated">Tschechien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="translated">Finnland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="translated">Frankreich</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="translated">Deutschland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="translated">Indien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="translated">Italien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="translated">Niederlande</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="translated">Neuseeland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="translated">Polen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="translated">Rumänien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="translated">Südafrika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="translated">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="translated">USA</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="translated">Inaktiv</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="translated">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="translated">Wirtschaftsraumklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="translated">von</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="translated">Regeln werden von Ihrem Portfolio erfüllt.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="translated">Anlageklasseklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="translated">KI-Anweisung wurde in die Zwischenablage kopiert</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="translated">Kopiere KI-Anweisung die Zwischenablage</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="translated">Regionale Marktklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="translated">Öffne Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="translated">Kopiere Portfolio-Daten in die Zwischenablage für KI-Anweisung</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="translated">Kopiere KI-Anweisung in die Zwischenablage für Analyse</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="translated">Armenien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="translated">Britische Jungferninseln</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="translated">Singapur</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="translated">Nutzungsbedingungen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="translated">Bitte bewahre dein Sicherheits-Token sicher auf. Wenn du es verlierst, kannst du dein Benutzerkonto nicht wiederherstellen.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="translated">Ich nehme zur Kenntnis, dass ich mein Benutzerkonto nicht wiederherstellen kann, wenn ich mein Sicherheits-Token verliere.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="translated">Weiter</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="translated">Hier ist dein Sicherheits-Token. Es ist nur ein einziges Mal sichtbar. Bitte bewahre es sicher auf.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.es.xlf

@ -17,6 +17,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
<source>The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.</source>
@ -261,10 +265,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -295,11 +295,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -531,7 +527,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -623,15 +619,7 @@
<target state="translated">¿Estás seguro de eliminar este cupón?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">¿Estás seguro de eliminar esta divisa?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -639,7 +627,7 @@
<target state="translated">¿Estás seguro de limpiar la caché?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -647,7 +635,7 @@
<target state="translated">Por favor, establece tu mensaje del sistema:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -694,14 +682,6 @@
<context context-type="linenumber">45</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Tipos de cambio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Añadir divisa</target>
@ -715,7 +695,7 @@
<target state="translated">Mensaje del sistema</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -723,7 +703,7 @@
<target state="translated">Establecer mensaje</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -731,7 +711,7 @@
<target state="translated">Modo de solo lectura</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -739,7 +719,7 @@
<target state="translated">Cupones</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -747,7 +727,7 @@
<target state="translated">Añadir</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -759,7 +739,7 @@
<target state="translated">Tareas domésticas</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -767,7 +747,7 @@
<target state="translated">Limpiar caché</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1083,7 +1063,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -1243,7 +1227,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -2135,7 +2119,7 @@
<target state="translated">Cronología de la inversión</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="6ae1c94f6bad274424f97e9bc8766242c1577447" datatype="html">
@ -2143,7 +2127,7 @@
<target state="translated">Lo mejor</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -2151,7 +2135,7 @@
<target state="translated">Lo peor</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -2455,23 +2439,7 @@
<target state="translated">Copiar al portapapeles</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated">Confirmo haber guardado mi <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Token de seguridad<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> mostrado arriba en un lugar seguro. Si lo pierdo, no podré recuperar mi cuenta.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Aceptar y continuar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="2446117790692479672" datatype="html">
@ -2567,7 +2535,7 @@
<target state="translated">¿Estás seguro de eliminar esta operación?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2823,7 +2791,7 @@
<target state="translated">Mensual</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8511b16abcf065252b350d64e337ba2447db3ffb" datatype="html">
@ -2851,7 +2819,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2863,7 +2831,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -2987,7 +2955,7 @@
<target state="translated">Evolución cartera</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="8192718423057883427" datatype="html">
@ -3307,7 +3275,7 @@
<target state="translated">Dividendo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -3319,7 +3287,7 @@
<target state="translated">Calendario de dividendos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="7608037008789240367" datatype="html">
@ -3335,7 +3303,7 @@
<target state="translated">Registro de usuario</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
@ -3423,7 +3391,7 @@
<target state="translated">Anual</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
@ -3759,7 +3727,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -3943,7 +3911,7 @@
<target state="new">Do you really want to delete these activities?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
@ -4171,7 +4139,7 @@
<target state="new">Current Streak</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4179,7 +4147,7 @@
<target state="new">Longest Streak</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
@ -4659,7 +4627,7 @@
<target state="new">Japan</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
@ -5760,7 +5728,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5904,7 +5872,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5912,7 +5880,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6032,7 +6000,7 @@
<target state="new">Do you really want to delete this asset profile?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6112,7 +6080,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6120,7 +6088,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6128,7 +6096,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6144,7 +6112,7 @@
<target state="new">Do you really want to delete this system message?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6300,11 +6268,11 @@
<target state="translated">Inversión</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6316,7 +6284,7 @@
<target state="new">Absolute Asset Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6324,7 +6292,7 @@
<target state="new"> Asset Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6332,7 +6300,7 @@
<target state="new">Absolute Currency Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6340,7 +6308,7 @@
<target state="new"> Currency Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6348,7 +6316,7 @@
<target state="new"> Absolute Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6356,7 +6324,7 @@
<target state="new"> Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6464,7 +6432,7 @@
<target state="new">Data Gathering</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6716,7 +6684,7 @@
<target state="translated">Estas seguro de borrar estos perfiles?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6724,7 +6692,7 @@
<target state="new">Oops! Could not delete profiles.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6868,7 +6836,7 @@
<target state="new">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6876,7 +6844,7 @@
<target state="new">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6884,7 +6852,7 @@
<target state="new">Belgium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6892,7 +6860,7 @@
<target state="new">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6900,7 +6868,7 @@
<target state="new">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6908,7 +6876,7 @@
<target state="new">Czech Republic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6916,7 +6884,7 @@
<target state="new">Finland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6924,7 +6892,7 @@
<target state="new">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6932,7 +6900,7 @@
<target state="new">Germany</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6940,7 +6908,7 @@
<target state="new">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6948,7 +6916,7 @@
<target state="new">Italy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6956,7 +6924,7 @@
<target state="new">Netherlands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6964,7 +6932,7 @@
<target state="new">New Zealand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6972,7 +6940,7 @@
<target state="new">Poland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6980,7 +6948,7 @@
<target state="new">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6988,7 +6956,7 @@
<target state="new">South Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6996,7 +6964,7 @@
<target state="new">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7004,7 +6972,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7036,7 +7004,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7348,7 +7316,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7438,7 +7406,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7566,7 +7534,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7574,7 +7542,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7590,7 +7558,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7622,15 +7590,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7654,7 +7614,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7726,7 +7686,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7765,6 +7725,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.fr.xlf

@ -320,10 +320,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -354,11 +350,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -590,7 +582,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -882,15 +874,7 @@
<target state="translated">Voulez-vous vraiment supprimer ce code promotionnel ?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Voulez-vous vraiment supprimer cette devise ?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -898,7 +882,7 @@
<target state="translated">Voulez-vous vraiment vider le cache ?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -906,7 +890,7 @@
<target state="translated">Veuillez définir votre message système :</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -933,14 +917,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Taux de Conversion</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Ajouter Devise</target>
@ -970,7 +946,7 @@
<target state="translated">Inscription de Nouveaux Utilisateurs</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -978,7 +954,7 @@
<target state="translated">Mode Lecture Seule</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
@ -986,7 +962,7 @@
<target state="translated">Message Système</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -994,7 +970,7 @@
<target state="translated">Définir Message</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -1002,7 +978,7 @@
<target state="translated">Codes promotionnels</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -1010,7 +986,7 @@
<target state="translated">Ajouter</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -1022,7 +998,7 @@
<target state="translated">Maintenance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -1030,7 +1006,7 @@
<target state="translated">Vider le Cache</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1378,7 +1354,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -1390,7 +1366,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -1438,7 +1414,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -1586,7 +1566,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -2738,7 +2718,7 @@
<target state="translated">Dividende</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -2758,7 +2738,7 @@
<target state="translated">Mensuel</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -2774,7 +2754,7 @@
<target state="translated">Haut</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -2782,7 +2762,7 @@
<target state="translated">Bas</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -2790,7 +2770,7 @@
<target state="translated">Évolution du Portefeuille</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -2798,7 +2778,7 @@
<target state="translated">Historique des Investissements</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
@ -2806,7 +2786,7 @@
<target state="translated">Historique des Dividendes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -2928,6 +2908,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="e1c4e91c3cf021ce1810d037887e0d7d4d1cface" datatype="html">
<source>Continue with Internet Identity</source>
@ -2950,23 +2934,7 @@
<target state="translated">Copier vers le presse-papier</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated"> Je certifie avoir sauvé mon <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Jeton de Sécurité<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> ci-dessus dans un endroit sûr. Si je le perds, je ne pourrai pas récupérer mon compte. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Accepter et continuer</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="2446117790692479672" datatype="html">
@ -3086,7 +3054,7 @@
<target state="translated">Voulez-vous vraiment supprimer cette activité ?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -3422,7 +3390,7 @@
<target state="translated">Annuel</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
@ -3758,7 +3726,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -3942,7 +3910,7 @@
<target state="translated">Voulez-vous vraiment supprimer toutes vos activités ?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
@ -4170,7 +4138,7 @@
<target state="translated">Série en cours</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4178,7 +4146,7 @@
<target state="translated">Série la plus longue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
@ -4658,7 +4626,7 @@
<target state="translated">Japon</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
@ -5759,7 +5727,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5903,7 +5871,7 @@
<target state="translated">Risques de change</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5911,7 +5879,7 @@
<target state="translated">Risques liés aux regroupements de comptes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6031,7 +5999,7 @@
<target state="translated">Confirmez la suppressoion de ce profil d&apos;actif?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6111,7 +6079,7 @@
<target state="translated">Extreme Peur</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6119,7 +6087,7 @@
<target state="translated">Extreme Cupidité</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6127,7 +6095,7 @@
<target state="translated">Neutre</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6143,7 +6111,7 @@
<target state="translated">Confirmer la suppresion de ce message système?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6299,11 +6267,11 @@
<target state="translated">Investissement</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6315,7 +6283,7 @@
<target state="translated">Performance des Actifs en valeur absolue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6323,7 +6291,7 @@
<target state="translated"> Performance des Actifs </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6331,7 +6299,7 @@
<target state="translated">Performance des devises en valeur absolue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6339,7 +6307,7 @@
<target state="translated"> Performance des devises </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6347,7 +6315,7 @@
<target state="translated"> Performance nette absolue </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6355,7 +6323,7 @@
<target state="translated"> Performance nette </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6463,7 +6431,7 @@
<target state="translated">Collecter les données</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6715,7 +6683,7 @@
<target state="translated">Confirmer la suppression de ces Profils?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6723,7 +6691,7 @@
<target state="translated">Oops! Echec de la suppression de Profils.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6867,7 +6835,7 @@
<target state="translated">Australie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="translated">Autriche</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="translated">Belgique</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="translated">Bulgarie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="translated">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="translated">République Tchèque</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="translated">Finlande</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="translated">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="translated">Allemagne</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="translated">Inde</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="translated">Italie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="translated">Pays-Bas</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="translated">Nouvelle-Zélande</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="translated">Pologne</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="translated">Roumanie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="translated">Afrique du Sud</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="translated">Thaïlande</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="translated">Etats-Unis</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="translated">Inactif</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.it.xlf

@ -17,6 +17,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
<source>The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.</source>
@ -261,10 +265,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -295,11 +295,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -531,7 +527,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -623,15 +619,7 @@
<target state="translated">Vuoi davvero eliminare questo buono?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Vuoi davvero eliminare questa valuta?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -639,7 +627,7 @@
<target state="translated">Vuoi davvero svuotare la cache?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -647,7 +635,7 @@
<target state="translated">Imposta il messaggio di sistema:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -694,14 +682,6 @@
<context context-type="linenumber">45</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Tassi di cambio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Aggiungi valuta</target>
@ -715,7 +695,7 @@
<target state="translated">Messaggio di sistema</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -723,7 +703,7 @@
<target state="translated">Imposta messaggio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -731,7 +711,7 @@
<target state="translated">Modalità di sola lettura</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -739,7 +719,7 @@
<target state="translated">Buoni sconto</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -747,7 +727,7 @@
<target state="translated">Aggiungi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -759,7 +739,7 @@
<target state="translated">Bilancio domestico</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -767,7 +747,7 @@
<target state="translated">Svuota la cache</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1083,7 +1063,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -1243,7 +1227,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -2135,7 +2119,7 @@
<target state="translated">Cronologia degli investimenti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="6ae1c94f6bad274424f97e9bc8766242c1577447" datatype="html">
@ -2143,7 +2127,7 @@
<target state="translated">In alto</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -2151,7 +2135,7 @@
<target state="translated">In basso</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -2455,23 +2439,7 @@
<target state="translated">Copia negli appunti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated">Accetto di aver memorizzato il mio <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Token di sicurezza<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> sopra citato in un luogo sicuro. Se lo perdo, non posso recuperare il mio account. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Accetta e continua</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="2446117790692479672" datatype="html">
@ -2567,7 +2535,7 @@
<target state="translated">Vuoi davvero eliminare questa attività?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2823,7 +2791,7 @@
<target state="translated">Mensile</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8511b16abcf065252b350d64e337ba2447db3ffb" datatype="html">
@ -2851,7 +2819,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2863,7 +2831,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -2987,7 +2955,7 @@
<target state="translated">Evoluzione del portafoglio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="8192718423057883427" datatype="html">
@ -3307,7 +3275,7 @@
<target state="translated">Dividendi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -3319,7 +3287,7 @@
<target state="translated">Cronologia dei dividendi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="7608037008789240367" datatype="html">
@ -3335,7 +3303,7 @@
<target state="translated">Registrazione utente</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
@ -3423,7 +3391,7 @@
<target state="translated">Annuale</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
@ -3759,7 +3727,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -3943,7 +3911,7 @@
<target state="translated">Vuoi davvero eliminare tutte le tue attività?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
@ -4171,7 +4139,7 @@
<target state="translated">Serie attuale</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4179,7 +4147,7 @@
<target state="translated">Serie più lunga</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
@ -4659,7 +4627,7 @@
<target state="translated">Giappone</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
@ -5760,7 +5728,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5904,7 +5872,7 @@
<target state="translated">Rischio di Concentrazione Valutario</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5912,7 +5880,7 @@
<target state="translated">Rischi di Concentrazione dei Conti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6032,7 +6000,7 @@
<target state="translated">Vuoi veramente eliminare il profilo di questo asset?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6112,7 +6080,7 @@
<target state="translated">Paura estrema</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6120,7 +6088,7 @@
<target state="translated">Avidità estrema</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6128,7 +6096,7 @@
<target state="translated">Neutrale</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6144,7 +6112,7 @@
<target state="translated">Confermi di voler cancellare questo messaggio di sistema?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6300,11 +6268,11 @@
<target state="translated">Investimento</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6316,7 +6284,7 @@
<target state="translated">Rendimento assoluto dell&apos;Asset</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6324,7 +6292,7 @@
<target state="translated"> Rendimento dell&apos;Asset </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6332,7 +6300,7 @@
<target state="translated">Rendimento assoluto della Valuta</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6340,7 +6308,7 @@
<target state="translated"> Rendimento della Valuta </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6348,7 +6316,7 @@
<target state="translated"> Rendimento assoluto della Valuta </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6356,7 +6324,7 @@
<target state="translated"> Rendimento Netto </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6464,7 +6432,7 @@
<target state="translated">Raccolta Dati</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6716,7 +6684,7 @@
<target state="translated">Confermi di voler eliminare questi profili?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6724,7 +6692,7 @@
<target state="translated">Ops! Impossibile eliminare i profili.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6868,7 +6836,7 @@
<target state="translated">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6876,7 +6844,7 @@
<target state="translated">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6884,7 +6852,7 @@
<target state="translated">Belgio</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6892,7 +6860,7 @@
<target state="translated">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6900,7 +6868,7 @@
<target state="translated">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6908,7 +6876,7 @@
<target state="translated">Repubblica Ceca</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6916,7 +6884,7 @@
<target state="translated">Finlandia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6924,7 +6892,7 @@
<target state="translated">Francia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6932,7 +6900,7 @@
<target state="translated">Germania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6940,7 +6908,7 @@
<target state="translated">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6948,7 +6916,7 @@
<target state="translated">Italia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6956,7 +6924,7 @@
<target state="translated">Olanda</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6964,7 +6932,7 @@
<target state="translated">Nuova Zelanda</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6972,7 +6940,7 @@
<target state="translated">Polonia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6980,7 +6948,7 @@
<target state="translated">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6988,7 +6956,7 @@
<target state="translated">Sud Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6996,7 +6964,7 @@
<target state="translated">Tailandia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7004,7 +6972,7 @@
<target state="translated">Stati Uniti</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7036,7 +7004,7 @@
<target state="translated">Inattivo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7348,7 +7316,7 @@
<target state="translated">Ucraina</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7438,7 +7406,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7566,7 +7534,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7574,7 +7542,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7590,7 +7558,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7622,15 +7590,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7654,7 +7614,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7726,7 +7686,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7765,6 +7725,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.nl.xlf

@ -16,6 +16,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
<source>The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.</source>
@ -260,10 +264,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -294,11 +294,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -530,7 +526,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -622,15 +618,7 @@
<target state="translated">Wil je deze coupon echt verwijderen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Wil je deze valuta echt verwijderen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -638,7 +626,7 @@
<target state="translated">Wil je echt de cache legen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -646,7 +634,7 @@
<target state="translated">Stel je systeemboodschap in:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -693,14 +681,6 @@
<context context-type="linenumber">45</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Wisselkoersen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Valuta toevoegen</target>
@ -714,7 +694,7 @@
<target state="translated">Systeembericht</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -722,7 +702,7 @@
<target state="translated">Bericht instellen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -730,7 +710,7 @@
<target state="translated">Alleen lezen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -738,7 +718,7 @@
<target state="translated">Coupons</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -746,7 +726,7 @@
<target state="translated">Toevoegen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -758,7 +738,7 @@
<target state="translated">Huishouding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -766,7 +746,7 @@
<target state="translated">Cache legen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1082,7 +1062,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -1242,7 +1226,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -2134,7 +2118,7 @@
<target state="translated">Tijdlijn investeringen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="6ae1c94f6bad274424f97e9bc8766242c1577447" datatype="html">
@ -2142,7 +2126,7 @@
<target state="translated">Winnaars</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -2150,7 +2134,7 @@
<target state="translated">Verliezers</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -2454,23 +2438,7 @@
<target state="translated">Kopieer naar klembord</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated">Ik ga ermee akkoord dat ik mijn <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> van hierboven op een veilige plaats heb opgeslagen. Als ik het verlies, kan ik mijn account niet terug krijgen. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Akkoord en doorgaan</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="2446117790692479672" datatype="html">
@ -2566,7 +2534,7 @@
<target state="translated">Wil je deze activiteit echt verwijderen?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2822,7 +2790,7 @@
<target state="translated">Maandelijks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8511b16abcf065252b350d64e337ba2447db3ffb" datatype="html">
@ -2850,7 +2818,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2862,7 +2830,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -2986,7 +2954,7 @@
<target state="translated">Waardeontwikkeling van portefeuille</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="8192718423057883427" datatype="html">
@ -3306,7 +3274,7 @@
<target state="translated">Dividend</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -3318,7 +3286,7 @@
<target state="translated">Tijdlijn dividend</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="7608037008789240367" datatype="html">
@ -3334,7 +3302,7 @@
<target state="translated">Account aanmaken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
@ -3422,7 +3390,7 @@
<target state="translated">Jaarlijks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
@ -3758,7 +3726,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -3942,7 +3910,7 @@
<target state="new">Wil je echt al je activiteiten verwijderen?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
@ -4170,7 +4138,7 @@
<target state="translated">Huidige reeks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4178,7 +4146,7 @@
<target state="translated">Langste reeks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
@ -4658,7 +4626,7 @@
<target state="translated">Japan</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
@ -5759,7 +5727,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5903,7 +5871,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5911,7 +5879,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6031,7 +5999,7 @@
<target state="new">Do you really want to delete this asset profile?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6111,7 +6079,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6119,7 +6087,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6127,7 +6095,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6143,7 +6111,7 @@
<target state="new">Do you really want to delete this system message?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6299,11 +6267,11 @@
<target state="new">Investment</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6315,7 +6283,7 @@
<target state="new">Absolute Asset Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6323,7 +6291,7 @@
<target state="new"> Asset Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6331,7 +6299,7 @@
<target state="new">Absolute Currency Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6339,7 +6307,7 @@
<target state="new"> Currency Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6347,7 +6315,7 @@
<target state="new"> Absolute Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6355,7 +6323,7 @@
<target state="new"> Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6463,7 +6431,7 @@
<target state="new">Data Gathering</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6715,7 +6683,7 @@
<target state="new">Do you really want to delete these profiles?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6723,7 +6691,7 @@
<target state="new">Oops! Could not delete profiles.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6867,7 +6835,7 @@
<target state="new">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="new">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="new">Belgium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="new">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="new">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="new">Czech Republic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="new">Finland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="new">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="new">Germany</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="new">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="new">Italy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="new">Netherlands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="new">New Zealand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="new">Poland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="new">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="new">South Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="new">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.pl.xlf

@ -469,6 +469,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="41d338980f469b334618a07e799b4aa40fcf4834" datatype="html">
<source>Personal Finance</source>
@ -1109,10 +1113,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -1143,11 +1143,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1379,7 +1375,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -1455,7 +1451,7 @@
<target state="translated">Czy na pewno chcesz usunąć ten profil aktywów?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -1787,15 +1783,7 @@
<target state="translated">Czy naprawdę chcesz usunąć ten kupon?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Czy naprawdę chcesz usunąć tę walutę?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1803,7 +1791,7 @@
<target state="translated">Czy naprawdę chcesz usunąć tę wiadomość systemową?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1811,7 +1799,7 @@
<target state="translated">Czy naprawdę chcesz wyczyścić pamięć podręczną?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1819,7 +1807,7 @@
<target state="translated">Proszę ustawić swoją wiadomość systemową:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1854,14 +1842,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Kursy Walut</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Dodaj Walutę</target>
@ -1875,7 +1855,7 @@
<target state="translated">Rejestracja Użytkownika</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -1883,7 +1863,7 @@
<target state="translated">Tryb Tylko do Odczytu</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
@ -1891,7 +1871,7 @@
<target state="translated">Wiadomość Systemowa</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -1899,7 +1879,7 @@
<target state="translated">Ustaw Wiadomość</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -1907,7 +1887,7 @@
<target state="translated">Kupony</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -1915,7 +1895,7 @@
<target state="translated">Dodaj</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -1927,7 +1907,7 @@
<target state="translated">Konserwacja</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -1935,7 +1915,7 @@
<target state="translated">Wyczyszczenie pamięci podręcznej</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="e587f3aaad8881a0b7732fb3e86df8a4c91f25d2" datatype="html">
@ -2327,7 +2307,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2339,7 +2319,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -2471,7 +2451,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -2587,7 +2571,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="de518fa0cd3a454e84102c0d9984c4a3cfdb590d" datatype="html">
@ -2635,7 +2619,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -4207,7 +4191,7 @@
<target state="translated">Czy na pewno chcesz usunąć te aktywności?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="72ba3bcdd8350cb8bf462e217a28ec7f7a48bb44" datatype="html">
@ -4655,7 +4639,7 @@
<target state="translated">Dywidenda</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -4675,7 +4659,7 @@
<target state="translated">Miesięcznie</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
@ -4683,7 +4667,7 @@
<target state="translated">Rocznie</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -4699,7 +4683,7 @@
<target state="translated">Największe wzrosty</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -4707,7 +4691,7 @@
<target state="translated">Największy spadek</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -4715,7 +4699,7 @@
<target state="translated">Rozwój portfela</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -4723,7 +4707,7 @@
<target state="translated">Oś czasu inwestycji</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
@ -4731,7 +4715,7 @@
<target state="translated">Obecna passa</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4739,7 +4723,7 @@
<target state="translated">Najdłuższa passa</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
@ -4747,7 +4731,7 @@
<target state="translated">Oś czasu dywidend</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -4779,7 +4763,7 @@
<target state="translated">Ryzyko związane z klastrem walutowym</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -4787,7 +4771,7 @@
<target state="translated">Ryzyko związane z klastrem kont</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
@ -5079,23 +5063,7 @@
<target state="translated">Kopiuj do schowka</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated"> Wyrażam zgodę na przechowywanie mojego <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Tokenu zabezpieczającego<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> w bezpiecznym miejscu. Jego utrata nie pozwoli odzyskać konta! </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Zgadzam się i kontynuuję</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="1914201149277662818" datatype="html">
@ -5383,7 +5351,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5555,7 +5523,7 @@
<target state="translated">Czy na pewno chcesz usunąć tę działalność?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="4149127798893455354" datatype="html">
@ -5803,7 +5771,7 @@
<target state="translated">Japonia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -6087,7 +6055,7 @@
<target state="translated">Skrajny Strach</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6095,7 +6063,7 @@
<target state="translated">Skrajna Zachłanność</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6103,7 +6071,7 @@
<target state="translated">Neutralny</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6299,11 +6267,11 @@
<target state="translated">Inwestycje</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6315,7 +6283,7 @@
<target state="translated">Łączny wynik aktywów</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6323,7 +6291,7 @@
<target state="translated"> Wyniki aktywów </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6331,7 +6299,7 @@
<target state="translated">Łączny wynik walut</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6339,7 +6307,7 @@
<target state="translated"> Wynik walut </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6347,7 +6315,7 @@
<target state="translated"> Łączna wartość netto </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6355,7 +6323,7 @@
<target state="translated"> Wynik netto </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6463,7 +6431,7 @@
<target state="translated">Gromadzenie Danych</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6715,7 +6683,7 @@
<target state="translated">Czy na pewno chcesz usunąć te profile?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6723,7 +6691,7 @@
<target state="translated">Ups! Nie udało się usunąć profili.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6867,7 +6835,7 @@
<target state="translated">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="translated">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="translated">Belgia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="translated">Bułgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="translated">Kanada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="translated">Czechy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="translated">Finlandia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="translated">Francja</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="translated">Niemcy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="translated">Indie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="translated">Włochy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="translated">Holandia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="translated">Nowa Zelandia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="translated">Polska</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="translated">Rumunia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="translated">Południowa Afryka</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="translated">Tajlandia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="translated">Stany Zjednoczone</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="translated">Nieaktywny</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="translated">Ukraina</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="translated">Ryzyko związane z klastrem rynków gospodarczych</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="translated">poza</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="translated">zasady zgodne z Twoim portfelem.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="translated">Ryzyko klastra klasy aktywów</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.pt.xlf

@ -320,10 +320,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -354,11 +350,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -590,7 +582,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -786,15 +778,7 @@
<target state="translated">Deseja realmente eliminar este cupão?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Deseja realmente excluir esta moeda?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -802,7 +786,7 @@
<target state="translated">Deseja realmente limpar a cache?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -810,7 +794,7 @@
<target state="translated">Por favor, defina a sua mensagem do sistema:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -829,14 +813,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Taxas de Câmbio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Adicionar Moeda</target>
@ -850,7 +826,7 @@
<target state="translated">Mensagem de Sistema</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -858,7 +834,7 @@
<target state="translated">Definir Mensagem</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -866,7 +842,7 @@
<target state="translated">Modo Somente Leitura</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -874,7 +850,7 @@
<target state="translated">Cupões</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -882,7 +858,7 @@
<target state="translated">Adicionar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -894,7 +870,7 @@
<target state="translated">Manutenção</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -902,7 +878,7 @@
<target state="translated">Limpar Cache</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1250,7 +1226,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -1262,7 +1238,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -1318,7 +1294,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -1466,7 +1446,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -2642,7 +2622,7 @@
<target state="translated">Mensalmente</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -2658,7 +2638,7 @@
<target state="translated">Topo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -2666,7 +2646,7 @@
<target state="translated">Fundo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -2674,7 +2654,7 @@
<target state="translated">Evolução do Portefólio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -2682,7 +2662,7 @@
<target state="translated">Cronograma de Investimento</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -2824,6 +2804,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="e1c4e91c3cf021ce1810d037887e0d7d4d1cface" datatype="html">
<source>Continue with Internet Identity</source>
@ -2846,23 +2830,7 @@
<target state="translated">Copiar para a área de transferência</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated"> Concordo em como guardei o meu <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Token de Segurança<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> acima num local seguro. Se o perder, não conseguirei recuperar a minha conta.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Aceitar e continuar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="2446117790692479672" datatype="html">
@ -2958,7 +2926,7 @@
<target state="translated">Deseja realmente eliminar esta atividade?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -3266,7 +3234,7 @@
<target state="translated">Registo do Utilizador</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="ec2d3a89b366d1ca80be056e9e71f0165ae75c7b" datatype="html">
@ -3374,7 +3342,7 @@
<target state="translated">Dividendos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -3386,7 +3354,7 @@
<target state="translated">Cronograma de Dividendos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="7608037008789240367" datatype="html">
@ -3422,7 +3390,7 @@
<target state="translated">Anualmente</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
@ -3758,7 +3726,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -3942,7 +3910,7 @@
<target state="translated">Deseja mesmo eliminar estas atividades?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
@ -4170,7 +4138,7 @@
<target state="translated">Série Atual</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4178,7 +4146,7 @@
<target state="translated">Série mais Longa</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
@ -4658,7 +4626,7 @@
<target state="translated">Japão</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
@ -5759,7 +5727,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5903,7 +5871,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5911,7 +5879,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6031,7 +5999,7 @@
<target state="new">Do you really want to delete this asset profile?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6111,7 +6079,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6119,7 +6087,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6127,7 +6095,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6143,7 +6111,7 @@
<target state="new">Do you really want to delete this system message?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6299,11 +6267,11 @@
<target state="new">Investment</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6315,7 +6283,7 @@
<target state="new">Absolute Asset Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6323,7 +6291,7 @@
<target state="new"> Asset Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6331,7 +6299,7 @@
<target state="new">Absolute Currency Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6339,7 +6307,7 @@
<target state="new"> Currency Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6347,7 +6315,7 @@
<target state="new"> Absolute Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6355,7 +6323,7 @@
<target state="new"> Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6463,7 +6431,7 @@
<target state="new">Data Gathering</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6715,7 +6683,7 @@
<target state="new">Do you really want to delete these profiles?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6723,7 +6691,7 @@
<target state="new">Oops! Could not delete profiles.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6867,7 +6835,7 @@
<target state="new">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="new">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="new">Belgium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="new">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="new">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="new">Czech Republic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="new">Finland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="new">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="new">Germany</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="new">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="new">Italy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="new">Netherlands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="new">New Zealand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="new">Poland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="new">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="new">South Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="new">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.tr.xlf

@ -1073,10 +1073,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -1107,11 +1103,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1343,7 +1335,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -1695,15 +1687,7 @@
<target state="translated">Önbelleği temizlemeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Bu para birimini silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1711,7 +1695,7 @@
<target state="translated">Önbelleği temizlemeyi gerçekten istiyor musunuz</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1719,7 +1703,7 @@
<target state="translated">Lütfen sistem mesajınızı belirleyin:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -1746,14 +1730,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Döviz Kurları</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">Para Birimi Ekle</target>
@ -1783,7 +1759,7 @@
<target state="translated">Kullanıcı Kaydı</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -1791,7 +1767,7 @@
<target state="translated">Salt okunur mod</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
@ -1799,7 +1775,7 @@
<target state="translated">Sistem Mesajı</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -1807,7 +1783,7 @@
<target state="translated">Mesaj Belirle</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -1815,7 +1791,7 @@
<target state="translated">Kupon</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -1823,7 +1799,7 @@
<target state="translated">Ekle</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -1835,7 +1811,7 @@
<target state="translated">Genel Ayarlar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -1843,7 +1819,7 @@
<target state="translated">Önbelleği temizle</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="e587f3aaad8881a0b7732fb3e86df8a4c91f25d2" datatype="html">
@ -2179,7 +2155,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2191,7 +2167,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -2323,7 +2299,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -2471,7 +2451,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -2627,7 +2607,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -3715,7 +3695,7 @@
<target state="new">Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="72ba3bcdd8350cb8bf462e217a28ec7f7a48bb44" datatype="html">
@ -4139,7 +4119,7 @@
<target state="translated">Temettü</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -4159,7 +4139,7 @@
<target state="translated">Aylık</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
@ -4167,7 +4147,7 @@
<target state="translated">Yıllık</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -4183,7 +4163,7 @@
<target state="translated">Üst</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -4191,7 +4171,7 @@
<target state="translated">Alt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -4199,7 +4179,7 @@
<target state="translated">Portföyün Gelişimi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -4207,7 +4187,7 @@
<target state="translated">Yatırım Zaman Çizelgesi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
@ -4215,7 +4195,7 @@
<target state="translated">Güncel Seri</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4223,7 +4203,7 @@
<target state="translated">En Uzun Seri</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
@ -4231,7 +4211,7 @@
<target state="translated">Temettü Zaman Çizelgesi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -4541,6 +4521,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="e1c4e91c3cf021ce1810d037887e0d7d4d1cface" datatype="html">
<source>Continue with Internet Identity</source>
@ -4563,23 +4547,7 @@
<target state="translated">Panoya Kopyala</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="new"> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Kabul et ve devam et</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="1914201149277662818" datatype="html">
@ -4859,7 +4827,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5271,7 +5239,7 @@
<target state="translated">TBu işlemi silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -5483,7 +5451,7 @@
<target state="new">Japan</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -5903,7 +5871,7 @@
<target state="translated">Kur Kümelenme Riskleri (Currency Cluster Risks)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5911,7 +5879,7 @@
<target state="translated">Hesap Kümelenme Riski (Account Cluster Risks)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6031,7 +5999,7 @@
<target state="translated">Bu varlık profilini silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
@ -6111,7 +6079,7 @@
<target state="translated">Aşırı Korku</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6119,7 +6087,7 @@
<target state="translated">Aşırı Açgözlülük</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6127,7 +6095,7 @@
<target state="translated">Nötr</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6143,7 +6111,7 @@
<target state="translated">Bu sistem mesajını silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6299,11 +6267,11 @@
<target state="new">Investment</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6315,7 +6283,7 @@
<target state="new">Absolute Asset Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -6323,7 +6291,7 @@
<target state="new"> Asset Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -6331,7 +6299,7 @@
<target state="new">Absolute Currency Performance</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6339,7 +6307,7 @@
<target state="new"> Currency Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6347,7 +6315,7 @@
<target state="new"> Absolute Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6355,7 +6323,7 @@
<target state="new"> Net Performance </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6463,7 +6431,7 @@
<target state="new">Data Gathering</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6715,7 +6683,7 @@
<target state="new">Do you really want to delete these profiles?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6723,7 +6691,7 @@
<target state="new">Oops! Could not delete profiles.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6867,7 +6835,7 @@
<target state="new">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6875,7 +6843,7 @@
<target state="new">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6883,7 +6851,7 @@
<target state="new">Belgium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6891,7 +6859,7 @@
<target state="new">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6899,7 +6867,7 @@
<target state="new">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6907,7 +6875,7 @@
<target state="new">Czech Republic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6915,7 +6883,7 @@
<target state="new">Finland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6923,7 +6891,7 @@
<target state="new">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6931,7 +6899,7 @@
<target state="new">Germany</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6939,7 +6907,7 @@
<target state="new">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6947,7 +6915,7 @@
<target state="new">Italy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6955,7 +6923,7 @@
<target state="new">Netherlands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6963,7 +6931,7 @@
<target state="new">New Zealand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6971,7 +6939,7 @@
<target state="new">Poland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6979,7 +6947,7 @@
<target state="new">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6987,7 +6955,7 @@
<target state="new">South Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6995,7 +6963,7 @@
<target state="new">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7003,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7035,7 +7003,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7347,7 +7315,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7437,7 +7405,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7565,7 +7533,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7573,7 +7541,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7589,7 +7557,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7621,15 +7589,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.uk.xlf

@ -52,6 +52,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="41d338980f469b334618a07e799b4aa40fcf4834" datatype="html">
<source>Personal Finance</source>
@ -1197,10 +1201,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -1231,11 +1231,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1635,7 +1631,7 @@
<target state="translated">Ви дійсно хочете видалити цей профіль активу?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -1643,7 +1639,7 @@
<target state="translated">Упс! Не вдалося видалити профілі.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="3514960995395821133" datatype="html">
@ -1651,7 +1647,7 @@
<target state="translated">Ви дійсно хочете видалити ці профілі?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -1855,7 +1851,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -1959,15 +1955,7 @@
<target state="translated">Ви дійсно хочете видалити цей купон?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">Ви дійсно хочете видалити цю валюту?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1975,7 +1963,7 @@
<target state="translated">Ви дійсно хочете видалити це системне повідомлення?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1983,7 +1971,7 @@
<target state="translated">Ви дійсно хочете очистити кеш?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1991,7 +1979,7 @@
<target state="translated">Будь ласка, встановіть ваше системне повідомлення:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -2026,20 +2014,12 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">Обмінні курси</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="62f17fd50522539fd4c85854828db9d2e1c5330f" datatype="html">
<source>User Signup</source>
<target state="translated">Реєстрація користувача</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -2047,7 +2027,7 @@
<target state="translated">Режим лише для читання</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="4f986b5ab20fe31ca54d7345a73b6b2402ddd350" datatype="html">
@ -2055,7 +2035,7 @@
<target state="translated">Збір даних</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
@ -2063,7 +2043,7 @@
<target state="translated">Системне повідомлення</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -2071,7 +2051,7 @@
<target state="translated">Встановити повідомлення</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -2079,7 +2059,7 @@
<target state="translated">Купони</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -2087,7 +2067,7 @@
<target state="translated">Додати</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -2099,7 +2079,7 @@
<target state="translated">Прибирання</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -2107,7 +2087,7 @@
<target state="translated">Очистити кеш</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="e587f3aaad8881a0b7732fb3e86df8a4c91f25d2" datatype="html">
@ -2731,7 +2711,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">
@ -2799,7 +2779,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2811,7 +2791,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -2943,7 +2923,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -3071,7 +3055,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -5331,7 +5315,7 @@
<target state="translated">Дивіденди</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5343,11 +5327,11 @@
<target state="translated">Інвестиції</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -5359,7 +5343,7 @@
<target state="translated">Щомісячно</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
@ -5367,7 +5351,7 @@
<target state="translated">Щорічно</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -5383,7 +5367,7 @@
<target state="translated">Абсолютна прибутковість активів</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="c726a56ba67c6c788e3759983dd8a1671d8cc886" datatype="html">
@ -5391,7 +5375,7 @@
<target state="translated"> Прибутковість активів </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="8ce52b52483f502dd23ed290357a17307c60280c" datatype="html">
@ -5399,7 +5383,7 @@
<target state="translated">Абсолютна прибутковість валюти</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -5407,7 +5391,7 @@
<target state="translated"> Прибутковість валюти </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -5415,7 +5399,7 @@
<target state="translated"> Абсолютна чиста прибутковість </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -5423,7 +5407,7 @@
<target state="translated"> Чиста прибутковість </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="6ae1c94f6bad274424f97e9bc8766242c1577447" datatype="html">
@ -5431,7 +5415,7 @@
<target state="translated">Топ</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -5439,7 +5423,7 @@
<target state="translated">Низ</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -5447,7 +5431,7 @@
<target state="translated">Еволюція портфеля</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -5455,7 +5439,7 @@
<target state="translated">Інвестиційний графік</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
@ -5463,7 +5447,7 @@
<target state="translated">Поточна серія</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -5471,7 +5455,7 @@
<target state="translated">Найдовша серія</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
@ -5479,7 +5463,7 @@
<target state="translated">Графік дивідендів</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -5527,7 +5511,7 @@
<target state="translated">з</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -5535,7 +5519,7 @@
<target state="translated">правила узгоджуються з вашим портфелем.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="50760c2140335b2324deaee120f40d9aa64b3238" datatype="html">
@ -5543,7 +5527,7 @@
<target state="translated">Ризики зосередження валюти</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c8b54fb8af53c13793e37377e06bbcd3c7dc2c7d" datatype="html">
@ -5551,7 +5535,7 @@
<target state="translated">Ризики зосередження класу активів</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5559,7 +5543,7 @@
<target state="translated">Ризики зосередження рахунків</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="d3e4b4ce50139bdb8e2ba2703e5e3b2417c0c832" datatype="html">
@ -5567,7 +5551,7 @@
<target state="translated">Ризики зосередження економічного ринку</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="43c4133c7a0263d2e33dd4c2e74d40784b2e4b1c" datatype="html">
@ -5575,7 +5559,7 @@
<target state="translated">Неактивний</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="5080775557941296581" datatype="html">
@ -5855,23 +5839,7 @@
<target state="translated">Копіювати в буфер обміну</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated"> Я погоджуюся зберігати свій <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Секретний Токен<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> у безпечному місці. Якщо я його втрачу, я не зможу відновити свій акаунт. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">Погоджуюся і продовжую</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="5020357869062357338" datatype="html">
@ -6009,7 +5977,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -6669,7 +6637,7 @@
<target state="translated">Ви дійсно хочете видалити ці дії?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="670983159637074283" datatype="html">
@ -6677,7 +6645,7 @@
<target state="translated">Ви дійсно хочете видалити цю активність?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="4149127798893455354" datatype="html">
@ -7385,7 +7353,7 @@
<target state="translated">Австралія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -7393,7 +7361,7 @@
<target state="translated">Австрія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -7401,7 +7369,7 @@
<target state="translated">Бельгія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -7409,7 +7377,7 @@
<target state="translated">Болгарія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -7417,7 +7385,7 @@
<target state="translated">Канада</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -7425,7 +7393,7 @@
<target state="translated">Чеська Республіка</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -7433,7 +7401,7 @@
<target state="translated">Фінляндія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -7441,7 +7409,7 @@
<target state="translated">Франція</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -7449,7 +7417,7 @@
<target state="translated">Німеччина</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -7457,7 +7425,7 @@
<target state="translated">Індія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -7465,7 +7433,7 @@
<target state="translated">Італія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="80663871075536039" datatype="html">
@ -7473,7 +7441,7 @@
<target state="translated">Японія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -7481,7 +7449,7 @@
<target state="translated">Нідерланди</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -7489,7 +7457,7 @@
<target state="translated">Нова Зеландія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -7497,7 +7465,7 @@
<target state="translated">Польща</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -7505,7 +7473,7 @@
<target state="translated">Румунія</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -7513,7 +7481,7 @@
<target state="translated">Південна Африка</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -7521,7 +7489,7 @@
<target state="translated">Таїланд</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="4346283537747431562" datatype="html">
@ -7529,7 +7497,7 @@
<target state="translated">Україна</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7537,7 +7505,7 @@
<target state="translated">Сполучені Штати</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1189482335778578193" datatype="html">
@ -7545,7 +7513,7 @@
<target state="translated">Екстремальний страх</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -7553,7 +7521,7 @@
<target state="translated">Екстремальна жадібність</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -7561,7 +7529,7 @@
<target state="translated">Нейтрально</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="258c041e93862316871096965e2d70579282fb1a" datatype="html">
@ -7629,15 +7597,7 @@
<target state="translated">Запит AI скопійовано в буфер обміну</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="translated">Скопіюйте запит AI в буфер обміну</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="4499ce8c46ad55564b23a42ed752e72984c0248f" datatype="html">
@ -7653,7 +7613,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7725,7 +7685,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7764,6 +7724,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

277
apps/client/src/locales/messages.xlf

@ -459,6 +459,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="41d338980f469b334618a07e799b4aa40fcf4834" datatype="html">
<source>Personal Finance</source>
@ -1077,10 +1081,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -1110,11 +1110,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1329,7 +1325,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -1400,7 +1396,7 @@
<source>Do you really want to delete this asset profile?</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -1704,35 +1700,28 @@
<source>Do you really want to delete this coupon?</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
<source>Do you really want to delete this system message?</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
<source>Do you really want to flush the cache?</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
<source>Please set your system message:</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1763,13 +1752,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<context-group purpose="location">
@ -1781,42 +1763,42 @@
<source>User Signup</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
<source>Read-only Mode</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
<source>System Message</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
<source>Set Message</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
<source>Coupons</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
<source>Add</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -1827,14 +1809,14 @@
<source>Housekeeping</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
<source>Flush Cache</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="e587f3aaad8881a0b7732fb3e86df8a4c91f25d2" datatype="html">
@ -2188,7 +2170,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2199,7 +2181,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -2316,7 +2298,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -2422,7 +2408,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="de518fa0cd3a454e84102c0d9984c4a3cfdb590d" datatype="html">
@ -2465,7 +2451,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -3875,7 +3861,7 @@
<source>Do you really want to delete these activities?</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="72ba3bcdd8350cb8bf462e217a28ec7f7a48bb44" datatype="html">
@ -4276,7 +4262,7 @@
<source>Dividend</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -4294,14 +4280,14 @@
<source>Monthly</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
<source>Yearly</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -4315,49 +4301,49 @@
<source>Top</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
<source>Bottom</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
<source>Portfolio Evolution</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
<source>Investment Timeline</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
<source>Current Streak</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
<source>Longest Streak</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
<source>Dividend Timeline</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -4385,14 +4371,14 @@
<source>Currency Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
<source>Account Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
@ -4655,21 +4641,7 @@
<source>Copy to clipboard</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="1914201149277662818" datatype="html">
@ -4951,7 +4923,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5112,7 +5084,7 @@
<source>Do you really want to delete this activity?</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="4149127798893455354" datatype="html">
@ -5345,7 +5317,7 @@
<source>Japan</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -5594,21 +5566,21 @@
<source>Extreme Fear</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
<source>Extreme Greed</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
<source>Neutral</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -5733,32 +5705,32 @@
<source>Absolute Currency Performance</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
<source> Absolute Net Performance </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="e19955db970092b9cde70be2cea163ab6adfac97" datatype="html">
<source>Absolute Asset Performance</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="8580549503047096056" datatype="html">
<source>Investment</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -5769,21 +5741,21 @@
<source> Asset Performance </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
<source> Net Performance </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
<source> Currency Performance </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -5907,7 +5879,7 @@
<source>Data Gathering</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6086,7 +6058,7 @@
<source>Do you really want to delete these profiles?</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="5a6b8dff75bad9c9ea5e010bd0d34beabd8ef3a2" datatype="html">
@ -6100,7 +6072,7 @@
<source>Oops! Could not delete profiles.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="829826868886560502" datatype="html">
@ -6149,35 +6121,35 @@
<source>Thailand</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
<source>India</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
<source>Austria</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
<source>Poland</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
<source>Italy</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="2657610384052021428" datatype="html">
@ -6219,21 +6191,21 @@
<source>Canada</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
<source>New Zealand</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
<source>Netherlands</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="4455104386790567151" datatype="html">
@ -6268,21 +6240,21 @@
<source>Romania</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
<source>Germany</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
<source>United States</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="647668541461749965" datatype="html">
@ -6296,7 +6268,7 @@
<source>Belgium</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="6984983607470794786" datatype="html">
@ -6310,28 +6282,28 @@
<source>Czech Republic</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="797743923912773831" datatype="html">
<source>Australia</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
<source>South Africa</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
<source>Bulgaria</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="8440128775129354214" datatype="html">
@ -6345,14 +6317,14 @@
<source>Finland</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
<source>France</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -6380,7 +6352,7 @@
<source>Inactive</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="7819314041543176992" datatype="html">
@ -6632,7 +6604,7 @@
<source>Ukraine</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
@ -6727,7 +6699,7 @@
<source>Economic Market Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="f907cfe9cf0c373052ff3964f941a5b784c57f06" datatype="html">
@ -6846,14 +6818,14 @@
<source>rules align with your portfolio.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -6867,7 +6839,7 @@
<source>Asset Class Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="110cc6cb39e1806d3775fd76f1d0753c9bc0e062" datatype="html">
@ -6891,18 +6863,11 @@
<context context-type="linenumber">57</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="7826234236931647519" datatype="html">
<source>AI prompt has been copied to the clipboard</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -6923,7 +6888,7 @@
<source>Regional Market Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">
@ -6986,7 +6951,7 @@
<source>Open Duck.ai</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7021,6 +6986,76 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

292
apps/client/src/locales/messages.zh.xlf

@ -470,6 +470,10 @@
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">2</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="41d338980f469b334618a07e799b4aa40fcf4834" datatype="html">
<source>Personal Finance</source>
@ -1118,10 +1122,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
<context context-type="linenumber">92</context>
@ -1152,11 +1152,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">89</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">196</context>
<context context-type="linenumber">129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1388,7 +1384,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
@ -1464,7 +1460,7 @@
<target state="translated">您确实要删除此资产配置文件吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -1796,15 +1792,7 @@
<target state="translated">您确实要删除此优惠券吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">137</context>
</context-group>
</trans-unit>
<trans-unit id="1110981355132746478" datatype="html">
<source>Do you really want to delete this currency?</source>
<target state="translated">您真的要删除该货币吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">134</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1812,7 +1800,7 @@
<target state="translated">您真的要删除这条系统消息吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">163</context>
<context context-type="linenumber">147</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1820,7 +1808,7 @@
<target state="translated">您真的要刷新缓存吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">187</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1828,7 +1816,7 @@
<target state="translated">请设置您的系统消息:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">207</context>
<context context-type="linenumber">191</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1863,14 +1851,6 @@
<context context-type="linenumber">28</context>
</context-group>
</trans-unit>
<trans-unit id="37ff0697aa81b2777250c483d2ce1ebdaa5ab042" datatype="html">
<source>Exchange Rates</source>
<target state="translated">汇率</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="4567a660a7f67e254bbf13219906843e34d9f807" datatype="html">
<source>Add Currency</source>
<target state="translated">添加货币</target>
@ -1884,7 +1864,7 @@
<target state="translated">用户注册</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="7fd64c34428887e4cd56d05534b89c100b8544ad" datatype="html">
@ -1892,7 +1872,7 @@
<target state="translated">只读模式</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="860e5f056b59410ec8db65cb53955505c6931752" datatype="html">
@ -1900,7 +1880,7 @@
<target state="translated">系统信息</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">139</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="657028d5fc9c3da8f2d667b6b15cd0df8b9a3729" datatype="html">
@ -1908,7 +1888,7 @@
<target state="translated">设置留言</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">161</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="e698b03c34b459b1b006d7f0473a49b9fcf5dfc1" datatype="html">
@ -1916,7 +1896,7 @@
<target state="translated">优惠券</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">
@ -1924,7 +1904,7 @@
<target state="translated">添加</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">162</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/account-balances/account-balances.component.html</context>
@ -1936,7 +1916,7 @@
<target state="translated">家政</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
@ -1944,7 +1924,7 @@
<target state="translated">刷新缓存</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="e587f3aaad8881a0b7732fb3e86df8a4c91f25d2" datatype="html">
@ -2336,7 +2316,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">98</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2348,7 +2328,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -2480,7 +2460,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">52</context>
</context-group>
</trans-unit>
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
@ -2596,7 +2580,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">178</context>
<context context-type="linenumber">213</context>
</context-group>
</trans-unit>
<trans-unit id="de518fa0cd3a454e84102c0d9984c4a3cfdb590d" datatype="html">
@ -2644,7 +2628,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -4216,7 +4200,7 @@
<target state="new">您真的要删除所有活动吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">218</context>
<context context-type="linenumber">219</context>
</context-group>
</trans-unit>
<trans-unit id="72ba3bcdd8350cb8bf462e217a28ec7f7a48bb44" datatype="html">
@ -4664,7 +4648,7 @@
<target state="translated">股息</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -4684,7 +4668,7 @@
<target state="translated">每月</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">66</context>
</context-group>
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
@ -4692,7 +4676,7 @@
<target state="translated">每年</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">56</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="f6413089f93ac0756a20f8e74ef1ab78c81ef13c" datatype="html">
@ -4708,7 +4692,7 @@
<target state="translated">顶部</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6723d5c967329a3ac75524cf0c1af5ced022b9a3" datatype="html">
@ -4716,7 +4700,7 @@
<target state="translated">底部</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">246</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="f1a355a1af2e818050a3af693ac8b521fa7edc5f" datatype="html">
@ -4724,7 +4708,7 @@
<target state="translated">投资组合演变</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">299</context>
<context context-type="linenumber">341</context>
</context-group>
</trans-unit>
<trans-unit id="658bfe96ba9d3a3a2ada478c8c855286b841f92a" datatype="html">
@ -4732,7 +4716,7 @@
<target state="translated">投资时间表</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">326</context>
<context context-type="linenumber">368</context>
</context-group>
</trans-unit>
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
@ -4740,7 +4724,7 @@
<target state="translated">当前连胜</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">347</context>
<context context-type="linenumber">389</context>
</context-group>
</trans-unit>
<trans-unit id="eabb7b2ede5498042bc9fbb565981a780bf340dc" datatype="html">
@ -4748,7 +4732,7 @@
<target state="translated">最长连续纪录</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
<context context-type="linenumber">398</context>
</context-group>
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
@ -4756,7 +4740,7 @@
<target state="translated">股息时间表</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">383</context>
<context context-type="linenumber">425</context>
</context-group>
</trans-unit>
<trans-unit id="6382f0e408575450219d3a10f8883a8f6c67e7d7" datatype="html">
@ -4788,7 +4772,7 @@
<target state="translated">货币集群风险</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -4796,7 +4780,7 @@
<target state="translated">账户集群风险</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">106</context>
<context context-type="linenumber">141</context>
</context-group>
</trans-unit>
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
@ -5088,23 +5072,7 @@
<target state="translated">复制到剪贴板</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="9397711dc06a5d217fb57befe8ae2fec4b8ed039" datatype="html">
<source> I agree to have stored my <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>Security Token<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> from above in a secure place. If I lose it, I cannot get my account back. </source>
<target state="translated">我同意存储我的<x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i&gt;"/>保安编码器<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/>从上面看,在一个安全的地方。如果我丢失了它,我将无法找回我的帐户。</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6a9a8caf09dab1871f119d73dfb79db2eda37a35" datatype="html">
<source>Agree and continue</source>
<target state="translated">同意并继续</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="1914201149277662818" datatype="html">
@ -5416,7 +5384,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
<context context-type="linenumber">93</context>
</context-group>
</trans-unit>
<trans-unit id="3437679369074503203" datatype="html">
@ -5596,7 +5564,7 @@
<target state="translated">您确实要删除此活动吗?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">228</context>
<context context-type="linenumber">229</context>
</context-group>
</trans-unit>
<trans-unit id="4149127798893455354" datatype="html">
@ -5860,7 +5828,7 @@
<target state="translated">日本</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -6144,7 +6112,7 @@
<target state="translated">极度恐惧</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6152,7 +6120,7 @@
<target state="translated">极度贪婪</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6160,7 +6128,7 @@
<target state="translated">中性的</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6300,7 +6268,7 @@
<target state="translated">绝对货币表现</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="5584854134b3049db7dfb7bf4d87a0b9b9b4b149" datatype="html">
@ -6308,7 +6276,7 @@
<target state="translated">绝对净性能</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">150</context>
<context context-type="linenumber">192</context>
</context-group>
</trans-unit>
<trans-unit id="e19955db970092b9cde70be2cea163ab6adfac97" datatype="html">
@ -6316,7 +6284,7 @@
<target state="translated">绝对资产绩效</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">60</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="8580549503047096056" datatype="html">
@ -6324,11 +6292,11 @@
<target state="translated">投资</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">47</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">61</context>
<context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
@ -6340,7 +6308,7 @@
<target state="translated">资产绩效</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="d88d656d93dd2029b9d35712789d2567d2c0d739" datatype="html">
@ -6348,7 +6316,7 @@
<target state="translated">净绩效</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">169</context>
<context context-type="linenumber">211</context>
</context-group>
</trans-unit>
<trans-unit id="e4da628796a8880899b986c2af0559a55d6a700c" datatype="html">
@ -6356,7 +6324,7 @@
<target state="translated">货币表现</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">169</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6496,7 +6464,7 @@
<target state="translated">数据收集</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
@ -6716,7 +6684,7 @@
<target state="new">Do you really want to delete these profiles?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">68</context>
</context-group>
</trans-unit>
<trans-unit id="8127349194179456616" datatype="html">
@ -6724,7 +6692,7 @@
<target state="new">Oops! Could not delete profiles.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">55</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="5c8ea0443990792280e53ee2cc87e577940c95cf" datatype="html">
@ -6868,7 +6836,7 @@
<target state="new">Australia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
<context context-type="linenumber">74</context>
</context-group>
</trans-unit>
<trans-unit id="21641575311466062" datatype="html">
@ -6876,7 +6844,7 @@
<target state="new">Austria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">74</context>
<context context-type="linenumber">75</context>
</context-group>
</trans-unit>
<trans-unit id="6787546539374733271" datatype="html">
@ -6884,7 +6852,7 @@
<target state="new">Belgium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">75</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="8273479446468988017" datatype="html">
@ -6892,7 +6860,7 @@
<target state="new">Bulgaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">76</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html">
@ -6900,7 +6868,7 @@
<target state="new">Canada</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="724957661944599897" datatype="html">
@ -6908,7 +6876,7 @@
<target state="new">Czech Republic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">80</context>
</context-group>
</trans-unit>
<trans-unit id="8812557643580169825" datatype="html">
@ -6916,7 +6884,7 @@
<target state="new">Finland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">79</context>
<context context-type="linenumber">81</context>
</context-group>
</trans-unit>
<trans-unit id="956678847762152494" datatype="html">
@ -6924,7 +6892,7 @@
<target state="new">France</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">80</context>
<context context-type="linenumber">82</context>
</context-group>
</trans-unit>
<trans-unit id="6014862663057951430" datatype="html">
@ -6932,7 +6900,7 @@
<target state="new">Germany</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">81</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="212820117866187249" datatype="html">
@ -6940,7 +6908,7 @@
<target state="new">India</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">84</context>
</context-group>
</trans-unit>
<trans-unit id="2427223107800831324" datatype="html">
@ -6948,7 +6916,7 @@
<target state="new">Italy</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">83</context>
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="3783587393795767345" datatype="html">
@ -6956,7 +6924,7 @@
<target state="new">Netherlands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">85</context>
<context context-type="linenumber">87</context>
</context-group>
</trans-unit>
<trans-unit id="3591085113786124083" datatype="html">
@ -6964,7 +6932,7 @@
<target state="new">New Zealand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="2356316679035829946" datatype="html">
@ -6972,7 +6940,7 @@
<target state="new">Poland</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">87</context>
<context context-type="linenumber">89</context>
</context-group>
</trans-unit>
<trans-unit id="545992063382313902" datatype="html">
@ -6980,7 +6948,7 @@
<target state="new">Romania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">90</context>
</context-group>
</trans-unit>
<trans-unit id="8039968326438721789" datatype="html">
@ -6988,7 +6956,7 @@
<target state="new">South Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">89</context>
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2040543873210054611" datatype="html">
@ -6996,7 +6964,7 @@
<target state="new">Thailand</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
<context context-type="linenumber">94</context>
</context-group>
</trans-unit>
<trans-unit id="6133495983093212227" datatype="html">
@ -7004,7 +6972,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7036,7 +7004,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">197</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7348,7 +7316,7 @@
<target state="new">Ukraine</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
<context context-type="linenumber">95</context>
</context-group>
</trans-unit>
<trans-unit id="f977904fb6da18ed1fcc2b56caa2315e991fd2ac" datatype="html">
@ -7438,7 +7406,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">130</context>
<context context-type="linenumber">165</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7566,7 +7534,7 @@
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
@ -7574,7 +7542,7 @@
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">58</context>
</context-group>
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
@ -7590,7 +7558,7 @@
<target state="new">Asset Class Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">82</context>
<context context-type="linenumber">117</context>
</context-group>
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
@ -7622,15 +7590,7 @@
<target state="new">AI prompt has been copied to the clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="4eecb3acb016e7d86740405b21599cdad8e0dd9f" datatype="html">
<source>Copy AI prompt to clipboard</source>
<target state="new">Copy AI prompt to clipboard</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">27</context>
<context context-type="linenumber">170</context>
</context-group>
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
@ -7654,7 +7614,7 @@
<target state="new">Regional Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
@ -7726,7 +7686,7 @@
<target state="new">Open Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">154</context>
<context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
@ -7765,6 +7725,86 @@
<context context-type="linenumber">378</context>
</context-group>
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
</context-group>
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
</context-group>
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="0c165378eae03c8bd376d2819d94b108d9929c64" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account.</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">38</context>
</context-group>
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

2
apps/client/src/styles.scss

@ -451,7 +451,7 @@ ngx-skeleton-loader {
}
.mat-mdc-menu-panel {
&.assistant {
&.no-max-width {
max-width: unset !important;
.mat-mdc-menu-content {

2
libs/common/src/lib/config.ts

@ -153,6 +153,8 @@ export const REPLACE_NAME_PARTS = [
'Xtrackers (IE) Plc -'
];
export const STORYBOOK_PATH = '/development/storybook';
export const SUPPORTED_LANGUAGE_CODES = [
'ca',
'de',

4
libs/common/src/lib/interfaces/account-balance.interface.ts

@ -0,0 +1,4 @@
export interface AccountBalance {
date: string;
value: number;
}

7
libs/common/src/lib/interfaces/admin-data.interface.ts

@ -1,11 +1,4 @@
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
export interface AdminData {
exchangeRates: ({
label1: string;
label2: string;
value: number;
} & AssetProfileIdentifier)[];
settings: { [key: string]: boolean | object | string | string[] };
transactionCount: number;
userCount: number;

6
libs/common/src/lib/interfaces/export.interface.ts

@ -1,7 +1,11 @@
import { Account, Order, Platform, Tag } from '@prisma/client';
import { AccountBalance } from './account-balance.interface';
export interface Export {
accounts: Omit<Account, 'createdAt' | 'updatedAt' | 'userId'>[];
accounts: (Omit<Account, 'createdAt' | 'updatedAt' | 'userId'> & {
balances: AccountBalance[];
})[];
activities: (Omit<
Order,
| 'accountUserId'

4
libs/common/src/lib/interfaces/index.ts

@ -1,4 +1,5 @@
import type { Access } from './access.interface';
import type { AccountBalance } from './account-balance.interface';
import type { Accounts } from './accounts.interface';
import type { AdminData } from './admin-data.interface';
import type { AdminJobs } from './admin-jobs.interface';
@ -41,6 +42,7 @@ import type { AccountBalancesResponse } from './responses/account-balances-respo
import type { AiPromptResponse } from './responses/ai-prompt-response.interface';
import type { ApiKeyResponse } from './responses/api-key-response.interface';
import type { BenchmarkResponse } from './responses/benchmark-response.interface';
import type { DataProviderGhostfolioAssetProfileResponse } from './responses/data-provider-ghostfolio-asset-profile-response.interface';
import type { DataProviderGhostfolioStatusResponse } from './responses/data-provider-ghostfolio-status-response.interface';
import type { DividendsResponse } from './responses/dividends-response.interface';
import type { ResponseError } from './responses/errors.interface';
@ -67,6 +69,7 @@ import type { XRayRulesSettings } from './x-ray-rules-settings.interface';
export {
Access,
AccountBalance,
AccountBalancesResponse,
Accounts,
AdminData,
@ -83,6 +86,7 @@ export {
BenchmarkProperty,
BenchmarkResponse,
Coupon,
DataProviderGhostfolioAssetProfileResponse,
DataProviderGhostfolioStatusResponse,
DataProviderInfo,
DividendsResponse,

4
libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts

@ -0,0 +1,4 @@
import { SymbolProfile } from '@prisma/client';
export interface DataProviderGhostfolioAssetProfileResponse
extends Partial<SymbolProfile> {}

57
libs/common/src/lib/personal-finance-tools.ts

@ -82,6 +82,16 @@ export const personalFinanceTools: Product[] = [
regions: ['Global'],
slogan: 'Take control of your financial future'
},
{
founded: 2017,
hasFreePlan: true,
hasSelfHostingAbility: false,
key: 'coinstats',
name: 'CoinStats',
origin: 'Armenia',
pricingPerYear: '$168',
slogan: 'Manage All Your Wallets & Exchanges From One Place'
},
{
founded: 2013,
hasFreePlan: true,
@ -154,6 +164,7 @@ export const personalFinanceTools: Product[] = [
name: 'Delta Investment Tracker',
note: 'Acquired by eToro',
origin: 'Belgium',
pricingPerYear: '$150',
slogan: 'The app to track all your investments. Make smart moves only.'
},
{
@ -252,6 +263,13 @@ export const personalFinanceTools: Product[] = [
slogan:
'The most convenient mobile application for personal finance accounting'
},
{
founded: 2022,
key: 'fincake',
name: 'Fincake',
origin: 'British Virgin Islands',
slogan: 'Easy-to-use Portfolio Tracker'
},
{
founded: 2023,
hasFreePlan: true,
@ -340,6 +358,15 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '€119',
slogan: 'ETF portfolios made simple'
},
{
founded: 2018,
hasFreePlan: true,
hasSelfHostingAbility: false,
key: 'koinly',
name: 'Koinly',
origin: 'Singapore',
slogan: 'Track all your crypto wallets in one place'
},
{
founded: 2016,
hasFreePlan: true,
@ -469,6 +496,16 @@ export const personalFinanceTools: Product[] = [
slogan:
'Track your equity, fund, investment trust, ETF and pension investments in one place.'
},
{
founded: 2020,
hasFreePlan: true,
hasSelfHostingAbility: false,
key: 'nansen',
name: 'Crypto Portfolio Tracker by Nansen',
origin: 'Singapore',
pricingPerYear: '$1188',
slogan: 'Your Complete Crypto Portfolio, Reimagined'
},
{
founded: 2017,
hasFreePlan: false,
@ -634,6 +671,16 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '€80',
slogan: 'Stock Portfolio Tracker'
},
{
founded: 2014,
hasFreePlan: true,
hasSelfHostingAbility: false,
key: 'simply-wallstreet',
name: 'Stock Portfolio Tracker & Visualizer by Simply Wall St',
origin: 'Australia',
pricingPerYear: '$120',
slogan: 'Smart portfolio tracker for informed investors'
},
{
founded: 2021,
hasFreePlan: true,
@ -706,6 +753,16 @@ export const personalFinanceTools: Product[] = [
slogan:
'Your financial life in a spreadsheet, automatically updated each day'
},
{
founded: 2011,
hasFreePlan: false,
hasSelfHostingAbility: false,
key: 'tradervue',
name: 'Tradervue',
origin: 'United States',
pricingPerYear: '$360',
slogan: 'The Trading Journal to Improve Your Trading Performance'
},
{
hasFreePlan: true,
hasSelfHostingAbility: false,

1
libs/common/src/lib/types/ai-prompt-mode.type.ts

@ -0,0 +1 @@
export type AiPromptMode = 'analysis' | 'portfolio';

2
libs/common/src/lib/types/index.ts

@ -2,6 +2,7 @@ import type { AccessType } from './access-type.type';
import type { AccessWithGranteeUser } from './access-with-grantee-user.type';
import type { AccountWithPlatform } from './account-with-platform.type';
import type { AccountWithValue } from './account-with-value.type';
import type { AiPromptMode } from './ai-prompt-mode.type';
import type { BenchmarkTrend } from './benchmark-trend.type';
import type { ColorScheme } from './color-scheme.type';
import type { DateRange } from './date-range.type';
@ -24,6 +25,7 @@ export type {
AccessWithGranteeUser,
AccountWithPlatform,
AccountWithValue,
AiPromptMode,
BenchmarkTrend,
ColorScheme,
DateRange,

5
libs/ui/src/lib/activities-table/activities-table.component.html

@ -500,7 +500,10 @@
/>
@if (
dataSource?.data.length === 0 && hasPermissionToCreateActivity && !isLoading
!hasActivities &&
dataSource?.data.length === 0 &&
hasPermissionToCreateActivity &&
!isLoading
) {
<div class="p-3 text-center">
<gf-no-transactions-info-indicator [hasBorder]="false" />

1
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -76,6 +76,7 @@ export class GfActivitiesTableComponent
@Input() baseCurrency: string;
@Input() dataSource: MatTableDataSource<Activity>;
@Input() deviceType: string;
@Input() hasActivities: boolean;
@Input() hasPermissionToCreateActivity: boolean;
@Input() hasPermissionToDeleteActivity: boolean;
@Input() hasPermissionToExportActivities: boolean;

7
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts

@ -7,7 +7,8 @@ import {
Component,
CUSTOM_ELEMENTS_SCHEMA,
Inject,
OnDestroy
OnDestroy,
OnInit
} from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
@ -41,7 +42,9 @@ import { HistoricalMarketDataEditorDialogParams } from './interfaces/interfaces'
styleUrls: ['./historical-market-data-editor-dialog.scss'],
templateUrl: 'historical-market-data-editor-dialog.html'
})
export class GfHistoricalMarketDataEditorDialogComponent implements OnDestroy {
export class GfHistoricalMarketDataEditorDialogComponent
implements OnDestroy, OnInit
{
private unsubscribeSubject = new Subject<void>();
public constructor(

3
libs/ui/src/lib/i18n.ts

@ -70,9 +70,11 @@ const locales = {
'South America': $localize`South America`,
// Countries
Armenia: $localize`Armenia`,
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`,
@ -86,6 +88,7 @@ const locales = {
'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`,

26820
package-lock.json

File diff suppressed because it is too large

85
package.json

@ -1,6 +1,6 @@
{
"name": "ghostfolio",
"version": "2.143.0",
"version": "2.146.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
@ -56,17 +56,17 @@
"workspace-generator": "nx workspace-generator"
},
"dependencies": {
"@angular/animations": "19.0.5",
"@angular/cdk": "19.0.4",
"@angular/common": "19.0.5",
"@angular/compiler": "19.0.5",
"@angular/core": "19.0.5",
"@angular/forms": "19.0.5",
"@angular/material": "19.0.4",
"@angular/platform-browser": "19.0.5",
"@angular/platform-browser-dynamic": "19.0.5",
"@angular/router": "19.0.5",
"@angular/service-worker": "19.0.5",
"@angular/animations": "19.2.1",
"@angular/cdk": "19.2.2",
"@angular/common": "19.2.1",
"@angular/compiler": "19.2.1",
"@angular/core": "19.2.1",
"@angular/forms": "19.2.1",
"@angular/material": "19.2.2",
"@angular/platform-browser": "19.2.1",
"@angular/platform-browser-dynamic": "19.2.1",
"@angular/router": "19.2.1",
"@angular/service-worker": "19.2.1",
"@codewithdan/observable-store": "2.2.15",
"@dfinity/agent": "0.15.7",
"@dfinity/auth-client": "0.15.7",
@ -86,9 +86,9 @@
"@nestjs/platform-express": "10.4.15",
"@nestjs/schedule": "4.1.2",
"@nestjs/serve-static": "4.0.2",
"@prisma/client": "6.4.1",
"@simplewebauthn/browser": "9.0.1",
"@simplewebauthn/server": "9.0.3",
"@prisma/client": "6.5.0",
"@simplewebauthn/browser": "13.1.0",
"@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "5.4.0",
"alphavantage": "2.2.0",
"big.js": "6.2.2",
@ -139,34 +139,33 @@
"zone.js": "0.15.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "19.0.6",
"@angular-devkit/core": "19.0.6",
"@angular-devkit/schematics": "19.0.6",
"@angular-eslint/eslint-plugin": "19.0.2",
"@angular-eslint/eslint-plugin-template": "19.0.2",
"@angular-eslint/template-parser": "19.0.2",
"@angular/cli": "19.0.6",
"@angular/compiler-cli": "19.0.5",
"@angular/language-service": "19.0.5",
"@angular/localize": "19.0.5",
"@angular/pwa": "19.0.6",
"@angular-devkit/build-angular": "19.2.1",
"@angular-devkit/core": "19.2.1",
"@angular-devkit/schematics": "19.2.1",
"@angular-eslint/eslint-plugin": "19.2.1",
"@angular-eslint/eslint-plugin-template": "19.2.1",
"@angular-eslint/template-parser": "19.2.1",
"@angular/cli": "19.2.1",
"@angular/compiler-cli": "19.2.1",
"@angular/language-service": "19.2.1",
"@angular/localize": "19.2.1",
"@angular/pwa": "19.2.1",
"@eslint/eslintrc": "3.2.0",
"@eslint/js": "9.18.0",
"@nestjs/schematics": "10.2.3",
"@nestjs/testing": "10.4.15",
"@nx/angular": "20.3.2",
"@nx/cypress": "20.3.2",
"@nx/eslint-plugin": "20.3.2",
"@nx/jest": "20.3.2",
"@nx/js": "20.3.2",
"@nx/module-federation": "20.3.2",
"@nx/nest": "20.3.2",
"@nx/node": "20.3.2",
"@nx/storybook": "20.3.2",
"@nx/web": "20.3.2",
"@nx/workspace": "20.3.2",
"@schematics/angular": "19.0.6",
"@simplewebauthn/types": "9.0.1",
"@nx/angular": "20.5.0",
"@nx/cypress": "20.5.0",
"@nx/eslint-plugin": "20.5.0",
"@nx/jest": "20.5.0",
"@nx/js": "20.5.0",
"@nx/module-federation": "20.5.0",
"@nx/nest": "20.5.0",
"@nx/node": "20.5.0",
"@nx/storybook": "20.5.0",
"@nx/web": "20.5.0",
"@nx/workspace": "20.5.0",
"@schematics/angular": "19.2.1",
"@storybook/addon-essentials": "8.4.7",
"@storybook/addon-interactions": "8.4.7",
"@storybook/angular": "8.4.7",
@ -193,10 +192,10 @@
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"jest-preset-angular": "14.4.2",
"nx": "20.3.2",
"prettier": "3.5.1",
"nx": "20.5.0",
"prettier": "3.5.3",
"prettier-plugin-organize-attributes": "1.0.0",
"prisma": "6.4.1",
"prisma": "6.5.0",
"react": "18.2.0",
"react-dom": "18.2.0",
"replace-in-file": "8.3.0",
@ -205,7 +204,7 @@
"ts-jest": "29.1.0",
"ts-node": "10.9.2",
"tslib": "2.8.1",
"typescript": "5.6.3",
"typescript": "5.7.3",
"webpack-bundle-analyzer": "4.10.2"
},
"engines": {

Loading…
Cancel
Save