Browse Source

Merge remote-tracking branch 'upstream/main' into localize-x-ray-rule

pull/4835/head
tobikugel 3 months ago
parent
commit
dba0ee3479
  1. 36
      CHANGELOG.md
  2. 9
      apps/api/src/app/admin/admin.controller.ts
  3. 2
      apps/api/src/app/admin/admin.module.ts
  4. 8
      apps/api/src/app/app.module.ts
  5. 4
      apps/api/src/app/info/info.service.ts
  6. 13
      apps/api/src/app/portfolio/portfolio.service.ts
  7. 6
      apps/api/src/app/user/user.service.ts
  8. 736
      apps/api/src/assets/cryptocurrencies/cryptocurrencies.json
  9. 8
      apps/api/src/assets/sitemap.xml
  10. 23
      apps/api/src/services/cron/cron.module.ts
  11. 15
      apps/api/src/services/cron/cron.service.ts
  12. 13
      apps/api/src/services/demo/demo.module.ts
  13. 59
      apps/api/src/services/demo/demo.service.ts
  14. 8
      apps/api/src/services/tag/tag.service.ts
  15. 2
      apps/client/src/app/app.component.html
  16. 6
      apps/client/src/app/app.component.scss
  17. 25
      apps/client/src/app/components/admin-overview/admin-overview.component.ts
  18. 21
      apps/client/src/app/components/admin-overview/admin-overview.html
  19. 2
      apps/client/src/app/components/admin-overview/admin-overview.module.ts
  20. 7
      apps/client/src/app/components/admin-settings/admin-settings.component.html
  21. 13
      apps/client/src/app/components/admin-settings/admin-settings.component.scss
  22. 21
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  23. 8
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
  24. 6
      apps/client/src/app/components/home-market/home-market.html
  25. 15
      apps/client/src/app/pages/faq/overview/faq-overview-page.html
  26. 37
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  27. 3
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
  28. 8
      apps/client/src/app/pages/webauthn/webauthn-page.html
  29. 4
      apps/client/src/app/services/admin.service.ts
  30. 72
      apps/client/src/locales/messages.ca.xlf
  31. 30
      apps/client/src/locales/messages.de.xlf
  32. 7626
      apps/client/src/locales/messages.es.xlf
  33. 48
      apps/client/src/locales/messages.fr.xlf
  34. 48
      apps/client/src/locales/messages.it.xlf
  35. 54
      apps/client/src/locales/messages.nl.xlf
  36. 66
      apps/client/src/locales/messages.pl.xlf
  37. 48
      apps/client/src/locales/messages.pt.xlf
  38. 36
      apps/client/src/locales/messages.tr.xlf
  39. 54
      apps/client/src/locales/messages.uk.xlf
  40. 44
      apps/client/src/locales/messages.xlf
  41. 48
      apps/client/src/locales/messages.zh.xlf
  42. 7
      libs/common/src/lib/config.ts
  43. 2
      libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
  44. 1
      libs/common/src/lib/permissions.ts
  45. 30
      package-lock.json
  46. 6
      package.json
  47. 10
      prisma/schema.prisma

36
CHANGELOG.md

@ -5,6 +5,42 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Added
- Added support to create custom tags in the create or update activity dialog (experimental)
### Changed
- Improved the style of the system message
- Improved the language localization for German (`de`)
- Improved the language localization for Turkish (`tr`)
- Improved the language localization for Ukrainian (`uk`)
## 2.165.0 - 2025-05-31
### Added
- Extended the content of the _General_ section by the performance calculation method on the Frequently Asked Questions (FAQ) page
### Changed
- Improved the _Live Demo_ setup by syncing activities based on tags
- Renamed `orders` to `activities` in the `Tag` database schema
- Modularized the cron service
- Refreshed the cryptocurrencies list
- Improved the language localization for Catalan (`ca`)
- Improved the language localization for Dutch (`nl`)
- Improved the language localization for Polish (`pl`)
- Improved the language localization for Spanish (`es`)
- Upgraded `big.js` from version `6.2.2` to `7.0.1`
- Upgraded `ng-extract-i18n-merge` from version `2.14.3` to `2.15.0`
### Fixed
- Changed the investment value to take the currency effects into account in the holding detail dialog
## 2.164.0 - 2025-05-28
### Changed

9
apps/api/src/app/admin/admin.controller.ts

@ -3,6 +3,7 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
import { DemoService } from '@ghostfolio/api/services/demo/demo.service';
import { PropertyDto } from '@ghostfolio/api/services/property/property.dto';
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import {
@ -55,6 +56,7 @@ export class AdminController {
private readonly adminService: AdminService,
private readonly apiService: ApiService,
private readonly dataGatheringService: DataGatheringService,
private readonly demoService: DemoService,
private readonly manualService: ManualService,
@Inject(REQUEST) private readonly request: RequestWithUser
) {}
@ -66,6 +68,13 @@ export class AdminController {
return this.adminService.get({ user: this.request.user });
}
@Get('demo-user/sync')
@HasPermission(permissions.syncDemoUserAccount)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async syncDemoUserAccount(): Promise<Prisma.BatchPayload> {
return this.demoService.syncDemoUserAccount();
}
@HasPermission(permissions.accessAdminControl)
@Post('gather')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)

2
apps/api/src/app/admin/admin.module.ts

@ -4,6 +4,7 @@ import { ApiModule } from '@ghostfolio/api/services/api/api.module';
import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { DemoModule } from '@ghostfolio/api/services/demo/demo.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
@ -24,6 +25,7 @@ import { QueueModule } from './queue/queue.module';
ConfigurationModule,
DataGatheringModule,
DataProviderModule,
DemoModule,
ExchangeRateDataModule,
MarketDataModule,
OrderModule,

8
apps/api/src/app/app.module.ts

@ -1,13 +1,12 @@
import { EventsModule } from '@ghostfolio/api/events/events.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { CronService } from '@ghostfolio/api/services/cron.service';
import { CronModule } from '@ghostfolio/api/services/cron/cron.module';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { DataGatheringModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module';
import { PortfolioSnapshotQueueModule } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.module';
import { TwitterBotModule } from '@ghostfolio/api/services/twitter-bot/twitter-bot.module';
import {
DEFAULT_LANGUAGE_CODE,
SUPPORTED_LANGUAGE_CODES
@ -78,6 +77,7 @@ import { UserModule } from './user/user.module';
CacheModule,
ConfigModule.forRoot(),
ConfigurationModule,
CronModule,
DataGatheringModule,
DataProviderModule,
EventEmitterModule.forRoot(),
@ -128,10 +128,8 @@ import { UserModule } from './user/user.module';
SubscriptionModule,
SymbolModule,
TagsModule,
TwitterBotModule,
UserModule,
WatchlistModule
],
providers: [CronService]
]
})
export class AppModule {}

4
apps/api/src/app/info/info.service.ts

@ -11,7 +11,7 @@ import {
HEADER_KEY_TOKEN,
PROPERTY_BETTER_UPTIME_MONITOR_ID,
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
PROPERTY_DEMO_USER_ID,
PROPERTY_DEMO_USER_ID_LEGACY,
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_SLACK_COMMUNITY_USERS,
ghostfolioFearAndGreedIndexDataSource
@ -237,7 +237,7 @@ export class InfoService {
private async getDemoAuthToken() {
const demoUserId = (await this.propertyService.getByKey(
PROPERTY_DEMO_USER_ID
PROPERTY_DEMO_USER_ID_LEGACY
)) as string;
if (demoUserId) {

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

@ -31,7 +31,7 @@ import {
} from '@ghostfolio/common/calculation-helper';
import {
DEFAULT_CURRENCY,
EMERGENCY_FUND_TAG_ID,
TAG_ID_EMERGENCY_FUND,
UNKNOWN_KEY
} from '@ghostfolio/common/config';
import { DATE_FORMAT, getSum, parseDate } from '@ghostfolio/common/helper';
@ -564,7 +564,7 @@ export class PortfolioService {
if (
filters?.length === 1 &&
filters[0].id === EMERGENCY_FUND_TAG_ID &&
filters[0].id === TAG_ID_EMERGENCY_FUND &&
filters[0].type === 'TAG'
) {
const emergencyFundCashPositions = await this.getCashPositions({
@ -663,7 +663,7 @@ export class PortfolioService {
grossPerformancePercentWithCurrencyEffect: undefined,
grossPerformanceWithCurrencyEffect: undefined,
historicalData: [],
investment: undefined,
investmentInBaseCurrencyWithCurrencyEffect: undefined,
marketPrice: undefined,
marketPriceMax: undefined,
marketPriceMin: undefined,
@ -853,7 +853,8 @@ export class PortfolioService {
grossPerformanceWithCurrencyEffect:
position.grossPerformanceWithCurrencyEffect?.toNumber(),
historicalData: historicalDataArray,
investment: position.investment?.toNumber(),
investmentInBaseCurrencyWithCurrencyEffect:
position.investmentWithCurrencyEffect?.toNumber(),
netPerformance: position.netPerformance?.toNumber(),
netPerformancePercent: position.netPerformancePercentage?.toNumber(),
netPerformancePercentWithCurrencyEffect:
@ -952,7 +953,7 @@ export class PortfolioService {
grossPerformancePercentWithCurrencyEffect: undefined,
grossPerformanceWithCurrencyEffect: undefined,
historicalData: historicalDataArray,
investment: 0,
investmentInBaseCurrencyWithCurrencyEffect: 0,
netPerformance: undefined,
netPerformancePercent: undefined,
netPerformancePercentWithCurrencyEffect: undefined,
@ -1654,7 +1655,7 @@ export class PortfolioService {
const emergencyFundHoldings = Object.values(holdings).filter(({ tags }) => {
return (
tags?.some(({ id }) => {
return id === EMERGENCY_FUND_TAG_ID;
return id === TAG_ID_EMERGENCY_FUND;
}) ?? false
);
});

6
apps/api/src/app/user/user.service.ts

@ -411,6 +411,10 @@ export class UserService {
user.subscription.offer.durationExtension = undefined;
user.subscription.offer.label = undefined;
}
if (hasRole(user, Role.ADMIN)) {
currentPermissions.push(permissions.syncDemoUserAccount);
}
}
if (this.configurationService.get('ENABLE_FEATURE_READ_ONLY_MODE')) {
@ -433,7 +437,7 @@ export class UserService {
}
}
if (!environment.production && role === 'ADMIN') {
if (!environment.production && hasRole(user, Role.ADMIN)) {
currentPermissions.push(permissions.impersonateAllUsers);
}

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

File diff suppressed because it is too large

8
apps/api/src/assets/sitemap.xml

@ -454,10 +454,6 @@
<loc>https://ghostfol.io/nl/over</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/nl/over/changelog</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/nl/over/licentie</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
@ -470,6 +466,10 @@
<loc>https://ghostfol.io/nl/over/privacybeleid</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/nl/over/wijzigingslogboek</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/nl/prijzen</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>

23
apps/api/src/services/cron/cron.module.ts

@ -0,0 +1,23 @@
import { UserModule } from '@ghostfolio/api/app/user/user.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { DataGatheringModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module';
import { TwitterBotModule } from '@ghostfolio/api/services/twitter-bot/twitter-bot.module';
import { Module } from '@nestjs/common';
import { CronService } from './cron.service';
@Module({
imports: [
ConfigurationModule,
DataGatheringModule,
ExchangeRateDataModule,
PropertyModule,
TwitterBotModule,
UserModule
],
providers: [CronService]
})
export class CronModule {}

15
apps/api/src/services/cron.service.ts → apps/api/src/services/cron/cron.service.ts

@ -1,4 +1,9 @@
import { UserService } from '@ghostfolio/api/app/user/user.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { TwitterBotService } from '@ghostfolio/api/services/twitter-bot/twitter-bot.service';
import {
DATA_GATHERING_QUEUE_PRIORITY_LOW,
GATHER_ASSET_PROFILE_PROCESS_JOB_NAME,
@ -10,12 +15,6 @@ import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { ConfigurationService } from './configuration/configuration.service';
import { ExchangeRateDataService } from './exchange-rate-data/exchange-rate-data.service';
import { PropertyService } from './property/property.service';
import { DataGatheringService } from './queues/data-gathering/data-gathering.service';
import { TwitterBotService } from './twitter-bot/twitter-bot.service';
@Injectable()
export class CronService {
private static readonly EVERY_SUNDAY_AT_LUNCH_TIME = '0 12 * * 0';
@ -43,7 +42,9 @@ export class CronService {
@Cron(CronExpression.EVERY_DAY_AT_5PM)
public async runEveryDayAtFivePm() {
this.twitterBotService.tweetFearAndGreedIndex();
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
this.twitterBotService.tweetFearAndGreedIndex();
}
}
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)

13
apps/api/src/services/demo/demo.module.ts

@ -0,0 +1,13 @@
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { Module } from '@nestjs/common';
import { DemoService } from './demo.service';
@Module({
exports: [DemoService],
imports: [PrismaModule, PropertyModule],
providers: [DemoService]
})
export class DemoModule {}

59
apps/api/src/services/demo/demo.service.ts

@ -0,0 +1,59 @@
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import {
PROPERTY_DEMO_ACCOUNT_ID,
PROPERTY_DEMO_USER_ID,
TAG_ID_DEMO
} from '@ghostfolio/common/config';
import { Injectable } from '@nestjs/common';
import { v4 as uuidv4 } from 'uuid';
@Injectable()
export class DemoService {
public constructor(
private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService
) {}
public async syncDemoUserAccount() {
const [demoAccountId, demoUserId] = (await Promise.all([
this.propertyService.getByKey(PROPERTY_DEMO_ACCOUNT_ID),
this.propertyService.getByKey(PROPERTY_DEMO_USER_ID)
])) as [string, string];
let activities = await this.prismaService.order.findMany({
orderBy: {
date: 'asc'
},
where: {
tags: {
some: {
id: TAG_ID_DEMO
}
}
}
});
activities = activities.map((activity) => {
return {
...activity,
accountId: demoAccountId,
accountUserId: demoUserId,
comment: null,
id: uuidv4(),
userId: demoUserId
};
});
await this.prismaService.order.deleteMany({
where: {
userId: demoUserId
}
});
return this.prismaService.order.createMany({
data: activities
});
}
}

8
apps/api/src/services/tag/tag.service.ts

@ -52,7 +52,7 @@ export class TagService {
include: {
_count: {
select: {
orders: {
activities: {
where: {
userId
}
@ -79,7 +79,7 @@ export class TagService {
id,
name,
userId,
isUsed: _count.orders > 0
isUsed: _count.activities > 0
}));
}
@ -87,7 +87,7 @@ export class TagService {
const tagsWithOrderCount = await this.prismaService.tag.findMany({
include: {
_count: {
select: { orders: true }
select: { activities: true }
}
}
});
@ -97,7 +97,7 @@ export class TagService {
id,
name,
userId,
activityCount: _count.orders
activityCount: _count.activities
};
});
}

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

@ -10,7 +10,7 @@
(click)="onCreateAccount()"
>
<span i18n>You are using the Live Demo.</span>
<span class="a ml-2" i18n>Create Account</span>
<span class="a ml-2 p-1" i18n>Create Account</span>
</div></a
>
}

6
apps/client/src/app/app.component.scss

@ -15,12 +15,14 @@
z-index: 999;
.info-message {
color: rgba(var(--palette-foreground-text), 1);
color: rgba(var(--light-primary-text));
font-size: 80%;
font-weight: 500;
max-width: 100%;
.a {
font-weight: 500;
border: 1px solid rgba(var(--light-primary-text));
border-radius: 0.25rem;
}
}
}

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

@ -22,12 +22,13 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { MatSlideToggleChange } from '@angular/material/slide-toggle';
import { MatSnackBar } from '@angular/material/snack-bar';
import {
differenceInSeconds,
formatDistanceToNowStrict,
parseISO
} from 'date-fns';
import { StringValue } from 'ms';
import ms, { StringValue } from 'ms';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@ -42,6 +43,7 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
public coupons: Coupon[];
public hasPermissionForSubscription: boolean;
public hasPermissionForSystemMessage: boolean;
public hasPermissionToSyncDemoUserAccount: boolean;
public hasPermissionToToggleReadOnlyMode: boolean;
public info: InfoItem;
public isDataGatheringEnabled: boolean;
@ -60,6 +62,7 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
private changeDetectorRef: ChangeDetectorRef,
private dataService: DataService,
private notificationService: NotificationService,
private snackBar: MatSnackBar,
private userService: UserService
) {
this.info = this.dataService.fetchInfo();
@ -80,6 +83,11 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
permissions.enableSystemMessage
);
this.hasPermissionToSyncDemoUserAccount = hasPermission(
this.user.permissions,
permissions.syncDemoUserAccount
);
this.hasPermissionToToggleReadOnlyMode = hasPermission(
this.user.permissions,
permissions.toggleReadOnlyMode
@ -206,6 +214,21 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
}
}
public onSyncDemoUserAccount() {
this.adminService
.syncDemoUserAccount()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {
this.snackBar.open(
'✅ ' + $localize`Demo user account has been synced.`,
undefined,
{
duration: ms('3 seconds')
}
);
});
}
public ngOnDestroy() {
this.unsubscribeSubject.next();
this.unsubscribeSubject.complete();

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

@ -169,10 +169,23 @@
<div class="d-flex my-3">
<div class="w-50" i18n>Housekeeping</div>
<div class="w-50">
<button color="warn" mat-flat-button (click)="onFlushCache()">
<ion-icon class="mr-1" name="close-circle-outline" />
<span i18n>Flush Cache</span>
</button>
<div class="align-items-start d-flex flex-column">
@if (hasPermissionToSyncDemoUserAccount) {
<button
class="mb-2"
color="accent"
mat-flat-button
(click)="onSyncDemoUserAccount()"
>
<ion-icon class="mr-1" name="sync-outline" />
<span i18n>Sync Demo User Account</span>
</button>
}
<button color="warn" mat-flat-button (click)="onFlushCache()">
<ion-icon class="mr-1" name="close-circle-outline" />
<span i18n>Flush Cache</span>
</button>
</div>
</div>
</div>
</mat-card-content>

2
apps/client/src/app/components/admin-overview/admin-overview.module.ts

@ -9,6 +9,7 @@ import { MatCardModule } from '@angular/material/card';
import { MatMenuModule } from '@angular/material/menu';
import { MatSelectModule } from '@angular/material/select';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { RouterModule } from '@angular/router';
import { AdminOverviewComponent } from './admin-overview.component';
@ -24,6 +25,7 @@ import { AdminOverviewComponent } from './admin-overview.component';
MatCardModule,
MatMenuModule,
MatSelectModule,
MatSnackBarModule,
MatSlideToggleModule,
ReactiveFormsModule,
RouterModule

7
apps/client/src/app/components/admin-settings/admin-settings.component.html

@ -23,7 +23,7 @@
[enableLink]="false"
/>
@if (isGhostfolioApiKeyValid === false) {
<span class="badge badge-warning ml-2" i18n
<span class="badge badge-light early-access ml-2" i18n
>Early Access</span
>
}
@ -105,12 +105,11 @@
</mat-menu>
} @else if (isGhostfolioApiKeyValid === false) {
<button
color="accent"
class="special"
mat-flat-button
(click)="onSetGhostfolioApiKey()"
>
<ion-icon class="mr-1" name="key-outline" />
<span i18n>Set API key</span>
<ng-container i18n>Set API key</ng-container>
</button>
}
}

13
apps/client/src/app/components/admin-settings/admin-settings.component.scss

@ -1,6 +1,19 @@
:host {
display: block;
button {
&.special {
background: linear-gradient(45deg, rgb(228, 94, 237), rgb(104, 94, 237));
color: #fff;
}
}
.badge {
&.early-access {
border: 1px solid var(--mat-table-row-item-outline-color);
}
}
.mat-mdc-progress-bar {
--mdc-linear-progress-active-indicator-height: 0.5rem;
--mdc-linear-progress-track-height: 0.5rem;

21
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts

@ -102,8 +102,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public hasPermissionToCreateOwnTag: boolean;
public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean;
public historicalDataItems: LineChartItem[];
public investment: number;
public investmentPrecision = 2;
public investmentInBaseCurrencyWithCurrencyEffect: number;
public investmentInBaseCurrencyWithCurrencyEffectPrecision = 2;
public marketDataItems: MarketData[] = [];
public marketPrice: number;
public marketPriceMax: number;
@ -233,7 +233,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
feeInBaseCurrency,
firstBuyDate,
historicalData,
investment,
investmentInBaseCurrencyWithCurrencyEffect,
marketPrice,
marketPriceMax,
marketPriceMin,
@ -288,13 +288,15 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
}
);
this.investment = investment;
this.investmentInBaseCurrencyWithCurrencyEffect =
investmentInBaseCurrencyWithCurrencyEffect;
if (
this.data.deviceType === 'mobile' &&
this.investment >= NUMERICAL_PRECISION_THRESHOLD
this.investmentInBaseCurrencyWithCurrencyEffect >=
NUMERICAL_PRECISION_THRESHOLD
) {
this.investmentPrecision = 0;
this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0;
}
this.marketPrice = marketPrice;
@ -450,10 +452,9 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
if (state?.user) {
this.user = state.user;
this.hasPermissionToCreateOwnTag = hasPermission(
this.user.permissions,
permissions.createOwnTag
);
this.hasPermissionToCreateOwnTag =
hasPermission(this.user.permissions, permissions.createOwnTag) &&
this.user?.settings?.isExperimentalFeatures;
this.tagsAvailable =
this.user?.tags?.map((tag) => {

8
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html

@ -146,9 +146,9 @@
size="medium"
[isCurrency]="true"
[locale]="data.locale"
[precision]="investmentPrecision"
[precision]="investmentInBaseCurrencyWithCurrencyEffectPrecision"
[unit]="data.baseCurrency"
[value]="investment"
[value]="investmentInBaseCurrencyWithCurrencyEffect"
>Investment</gf-value
>
</div>
@ -388,9 +388,7 @@
</mat-tab-group>
<gf-tags-selector
[hasPermissionToCreateTag]="
hasPermissionToCreateOwnTag && user?.settings?.isExperimentalFeatures
"
[hasPermissionToCreateTag]="hasPermissionToCreateOwnTag"
[readonly]="!data.hasPermissionToUpdateOrder"
[tags]="activityForm.get('tags')?.value"
[tagsAvailable]="tagsAvailable"

6
apps/client/src/app/components/home-market/home-market.html

@ -37,8 +37,10 @@
[user]="user"
/>
@if (benchmarks?.length > 0) {
<div class="mt-3 text-center">
<small class="text-muted" i18n>
<div
class="gf-text-wrap-balance line-height-1 mt-3 text-center text-muted"
>
<small i18n>
Calculations are based on delayed market data and may not be
displayed in real-time.</small
>

15
apps/client/src/app/pages/faq/overview/faq-overview-page.html

@ -40,6 +40,21 @@
<a [routerLink]="routerLinkFeatures">here</a>.
</mat-card-content>
</mat-card>
<mat-card appearance="outlined" class="mb-3">
<mat-card-header>
<mat-card-title
>Which calculation method does Ghostfolio use for
performance?</mat-card-title
>
</mat-card-header>
<mat-card-content
>Ghostfolio uses the <i>Return on Average Investment</i> (ROAI)
calculation method based on the average amount of capital invested
over time. ROAI aims to provide a more insightful view of investment
performance than simpler approaches, especially when contributions are
made over time.</mat-card-content
>
</mat-card>
<mat-card appearance="outlined" class="mb-3">
<mat-card-header>
<mat-card-title>Can I use Ghostfolio anonymously?</mat-card-title>

37
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts

@ -1,6 +1,8 @@
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { getDateFormatString } from '@ghostfolio/common/helper';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { translate } from '@ghostfolio/ui/i18n';
import {
@ -42,6 +44,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
public currencyOfAssetProfile: string;
public currentMarketPrice = null;
public defaultDateFormat: string;
public hasPermissionToCreateOwnTag: boolean;
public isLoading = false;
public isToday = isToday;
public mode: 'create' | 'update';
@ -60,11 +63,15 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
private dateAdapter: DateAdapter<any>,
public dialogRef: MatDialogRef<CreateOrUpdateActivityDialog>,
private formBuilder: FormBuilder,
@Inject(MAT_DATE_LOCALE) private locale: string
@Inject(MAT_DATE_LOCALE) private locale: string,
private userService: UserService
) {}
public ngOnInit() {
this.currencyOfAssetProfile = this.data.activity?.SymbolProfile?.currency;
this.hasPermissionToCreateOwnTag =
this.data.user?.settings?.isExperimentalFeatures &&
hasPermission(this.data.user?.permissions, permissions.createOwnTag);
this.locale = this.data.user?.settings?.locale;
this.mode = this.data.activity?.id ? 'update' : 'create';
@ -219,6 +226,34 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.changeDetectorRef.markForCheck();
});
this.activityForm.get('tags').valueChanges.subscribe((tags: Tag[]) => {
const newTag = tags.find(({ id }) => {
return id === undefined;
});
if (newTag && this.hasPermissionToCreateOwnTag) {
this.dataService
.postTag({ ...newTag, userId: this.data.user.id })
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe((tag) => {
this.activityForm.get('tags').setValue(
tags.map((currentTag) => {
if (currentTag.id === undefined) {
return tag;
}
return currentTag;
})
);
this.userService
.get(true)
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe();
});
}
});
this.activityForm
.get('type')
.valueChanges.pipe(takeUntil(this.unsubscribeSubject))

3
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html

@ -313,8 +313,9 @@
</mat-select>
</mat-form-field>
</div>
<div class="mb-3" [ngClass]="{ 'd-none': tagsAvailable?.length < 1 }">
<div class="mb-3">
<gf-tags-selector
[hasPermissionToCreateTag]="hasPermissionToCreateOwnTag"
[tags]="activityForm.get('tags')?.value"
[tagsAvailable]="tagsAvailable"
(tagsChanged)="onTagsChanged($event)"

8
apps/client/src/app/pages/webauthn/webauthn-page.html

@ -19,15 +19,17 @@
<ng-container i18n>Oops, authentication has failed.</ng-container>
</h1>
<button
class="mb-3 mt-4"
class="mt-4"
color="primary"
mat-flat-button
(click)="signIn()"
>
<ng-container i18n>Try again</ng-container>
</button>
<div class="text-muted"><ng-container i18n>or</ng-container></div>
<button class="mt-1" mat-flat-button (click)="deregisterDevice()">
<div class="my-2 text-muted">
<ng-container i18n>or</ng-container>
</div>
<button mat-stroked-button (click)="deregisterDevice()">
<ng-container i18n>Go back to Home Page</ng-container>
</button>
</div>

4
apps/client/src/app/services/admin.service.ts

@ -246,6 +246,10 @@ export class AdminService {
);
}
public syncDemoUserAccount() {
return this.http.get<void>(`/api/v1/admin/demo-user/sync`);
}
public testMarketData({
dataSource,
scraperConfiguration,

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

@ -1123,7 +1123,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -1171,7 +1171,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -1591,7 +1591,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1599,7 +1599,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1607,7 +1607,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1615,7 +1615,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1735,7 +1735,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="7418ba6a757086804d7e00948f8b328050d99040" datatype="html">
@ -1803,7 +1803,7 @@
<target state="translated">Plataformes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
@ -1811,7 +1811,7 @@
<target state="translated">Etiquetes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -2231,7 +2231,7 @@
<target state="translated">Informar d’un Problema amb les Dades</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="8204176479746810612" datatype="html">
@ -2463,7 +2463,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -2516,7 +2516,7 @@
</trans-unit>
<trans-unit id="44268762ecf7c7d690288f763f17196216671353" datatype="html">
<source>{VAR_PLURAL, plural, =1 {activity} other {activities}}</source>
<target state="new">{VAR_PLURAL, plural, =1 {activity} other {activities}}</target>
<target state="translated">{VAR_PLURAL, plural, =1 {activitat} other {activitats}}</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">14</context>
@ -4257,7 +4257,7 @@
</trans-unit>
<trans-unit id="0c733f4d3a472252964704587a83aa7cc83e1bb3" datatype="html">
<source>Mortgages, personal loans, credit cards</source>
<target state="new">Mortgages, personal loans, credit cards</target>
<target state="translated">Hipoteques, préstecs personals, targetes de crèdit</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">57</context>
@ -4265,7 +4265,7 @@
</trans-unit>
<trans-unit id="8beebcb81b9784b6be5d535419735221efd2d1ce" datatype="html">
<source>Luxury items, real estate, private companies</source>
<target state="new">Luxury items, real estate, private companies</target>
<target state="translated">Articles de luxe, immobiliari, empreses privades</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">73</context>
@ -4273,7 +4273,7 @@
</trans-unit>
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
<source>Account</source>
<target state="new">Account</target>
<target state="translated">Compte</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">85</context>
@ -4289,7 +4289,7 @@
</trans-unit>
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
<source>Update Cash Balance</source>
<target state="new">Update Cash Balance</target>
<target state="translated">Actualitzar el saldo d’efectiu</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">112</context>
@ -4297,7 +4297,7 @@
</trans-unit>
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
<source>Unit Price</source>
<target state="new">Unit Price</target>
<target state="translated">Preu unitari</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">213</context>
@ -4309,7 +4309,7 @@
</trans-unit>
<trans-unit id="160f1ffbd26df073d0fbd02cf8ce0d8cea7603b0" datatype="html">
<source>Fee</source>
<target state="new">Fee</target>
<target state="translated">Quota</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">261</context>
@ -4321,7 +4321,7 @@
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source>
<target state="new">Import Activities</target>
<target state="translated">Activitats d’importació</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">47</context>
@ -4329,7 +4329,7 @@
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source>
<target state="new">Import Dividends</target>
<target state="translated">Importar dividends</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">88</context>
@ -4337,7 +4337,7 @@
</trans-unit>
<trans-unit id="848497846891931418" datatype="html">
<source>Importing data...</source>
<target state="new">Importing data...</target>
<target state="translated">S’estan important dades...</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">126</context>
@ -4345,7 +4345,7 @@
</trans-unit>
<trans-unit id="7500216440144530775" datatype="html">
<source>Import has been completed</source>
<target state="new">Import has been completed</target>
<target state="translated">La importació s’ha completat</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">134</context>
@ -4353,7 +4353,7 @@
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
<source>Validating data...</source>
<target state="new">Validating data...</target>
<target state="translated">S’estan validant les dades...</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">242</context>
@ -4361,7 +4361,7 @@
</trans-unit>
<trans-unit id="4de7b521c9a386fa682d6c995b30f6bc2d6c14b8" datatype="html">
<source>Select Holding</source>
<target state="new">Select Holding</target>
<target state="translated">Seleccioneu Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
<context context-type="linenumber">20</context>
@ -4369,7 +4369,7 @@
</trans-unit>
<trans-unit id="e95a9542e72bb61cac804b274ab760af2b5f7fc5" datatype="html">
<source>Select File</source>
<target state="new">Select File</target>
<target state="translated">Seleccioneu Fitxer</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
<context context-type="linenumber">22</context>
@ -5501,7 +5501,7 @@
<target state="new">Go back to Home Page</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="2263595996673750436" datatype="html">
@ -6893,7 +6893,7 @@
<target state="new">Set API key</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7592,7 +7592,7 @@
<target state="new"> Calculations are based on delayed market data and may not be displayed in real-time.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7604,6 +7604,22 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</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">223</context>
</context-group>
</trans-unit>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>

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

@ -534,7 +534,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -582,7 +582,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -634,7 +634,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -642,7 +642,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -650,7 +650,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -762,7 +762,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1114,7 +1114,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -1338,7 +1338,7 @@
<target state="translated">Tags</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1354,7 +1354,7 @@
<target state="translated">Datenfehler melden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -2478,7 +2478,7 @@
<target state="translated">Zurück zur Startseite</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="86022280b7836d1aff7fdc0182415b041ae3625c" datatype="html">
@ -3966,7 +3966,7 @@
<target state="translated">Plattformen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
@ -5732,7 +5732,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6917,7 +6917,7 @@
<target state="translated">API-Schlüssel setzen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7592,12 +7592,12 @@
<target state="translated"> Berechnungen basieren auf verzögerten Marktdaten und werden nicht in Echtzeit angezeigt.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
<source>changelog</source>
<target state="new">changelog</target>
<target state="translated">changelog</target>
<note priority="1" from="description">kebab-case</note>
<context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/paths.ts</context>

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

File diff suppressed because it is too large

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

@ -590,7 +590,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -638,7 +638,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -874,7 +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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -882,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -890,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -930,7 +930,7 @@
<target state="translated">Étiquettes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1006,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1450,7 +1450,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -1682,7 +1682,7 @@
<target state="translated">Signaler une Erreur de Données</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="6048892649018070225" datatype="html">
@ -2958,7 +2958,7 @@
<target state="translated">Retour à la Page d’Accueil</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="2614607010577950577" datatype="html">
@ -3942,7 +3942,7 @@
<target state="translated">Platformes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
@ -5708,7 +5708,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6893,7 +6893,7 @@
<target state="translated">Définir clé API</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7592,7 +7592,7 @@
<target state="translated"> Les calculs sont basés sur des données de marché retardées et peuvent ne pas être affichés en temps réel.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7604,20 +7604,20 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -535,7 +535,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -583,7 +583,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -635,7 +635,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -643,7 +643,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -651,7 +651,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -747,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1099,7 +1099,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -1323,7 +1323,7 @@
<target state="translated">Tag</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1339,7 +1339,7 @@
<target state="translated">Segnala un’anomalia dei dati</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -2463,7 +2463,7 @@
<target state="translated">Torna alla pagina iniziale</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="86022280b7836d1aff7fdc0182415b041ae3625c" datatype="html">
@ -3943,7 +3943,7 @@
<target state="translated">Piattaforme</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
@ -5709,7 +5709,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6894,7 +6894,7 @@
<target state="translated">Imposta API Key</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7593,7 +7593,7 @@
<target state="translated"> I calcoli sono basati su dati di mercato ritardati e potrebbero non essere visualizzati in tempo reale.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7605,20 +7605,20 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -534,7 +534,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -582,7 +582,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -634,7 +634,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -642,7 +642,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -650,7 +650,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -746,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1098,7 +1098,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -1322,7 +1322,7 @@
<target state="translated">Tags</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1338,7 +1338,7 @@
<target state="translated">Gegevensstoring melden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -2462,7 +2462,7 @@
<target state="translated">Ga terug naar de startpagina</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="86022280b7836d1aff7fdc0182415b041ae3625c" datatype="html">
@ -3942,7 +3942,7 @@
<target state="translated">Platforms</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
@ -5708,7 +5708,7 @@
<target state="translated">Wilt u dit systeembericht 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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6893,7 +6893,7 @@
<target state="translated">API-sleutel instellen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7220,7 +7220,7 @@
</trans-unit>
<trans-unit id="5de9d226db382155f482a557b832da6d63108112" datatype="html">
<source>Selector</source>
<target state="new">Selector</target>
<target state="translated">Kiezer</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">439</context>
@ -7589,35 +7589,35 @@
</trans-unit>
<trans-unit id="9d1266dbf13a2f77fa5746e235cb8e688a3499e8" datatype="html">
<source> Calculations are based on delayed market data and may not be displayed in real-time.</source>
<target state="new"> Calculations are based on delayed market data and may not be displayed in real-time.</target>
<target state="translated">Berekeningen zijn gebaseerd op vertraagde marktgegevens en worden mogelijk niet in realtime weergegeven.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
<source>changelog</source>
<target state="new">changelog</target>
<target state="translated">wijzigingslogboek</target>
<note priority="1" from="description">kebab-case</note>
<context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/paths.ts</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -1015,7 +1015,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -1063,7 +1063,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -1415,7 +1415,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1423,7 +1423,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1431,7 +1431,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1439,7 +1439,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1547,7 +1547,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="7418ba6a757086804d7e00948f8b328050d99040" datatype="html">
@ -1635,7 +1635,7 @@
<target state="translated">Platformy</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
@ -1643,7 +1643,7 @@
<target state="translated">Tagi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -2119,7 +2119,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -2403,7 +2403,7 @@
<target state="translated">Zgłoś Błąd Danych</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2573979fd7d8602db44b7b4ad493428bc354d2f5" datatype="html">
@ -5044,7 +5044,7 @@
<target state="translated">Wróć do Strony Głównej</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="ed1d0d3031aba025b9bf280c1d7c54f44982ed46" datatype="html">
@ -6170,7 +6170,7 @@
</trans-unit>
<trans-unit id="44268762ecf7c7d690288f763f17196216671353" datatype="html">
<source>{VAR_PLURAL, plural, =1 {activity} other {activities}}</source>
<target state="new">{VAR_PLURAL, plural, =1 {activity} other {activities}}</target>
<target state="translated">{VAR_PLURAL, plural, =1 {działalność} other {działalność}}</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">14</context>
@ -6893,7 +6893,7 @@
<target state="translated">Skonfiguruj klucz API</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7204,7 +7204,7 @@
</trans-unit>
<trans-unit id="47969a4a0916bea5385b42c18749e32a35f07bd7" datatype="html">
<source>Default Market Price</source>
<target state="new">Default Market Price</target>
<target state="translated">Domyślna cena rynkowa</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">386</context>
@ -7212,7 +7212,7 @@
</trans-unit>
<trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">
<source>Mode</source>
<target state="new">Mode</target>
<target state="translated">Tryb</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">423</context>
@ -7220,7 +7220,7 @@
</trans-unit>
<trans-unit id="5de9d226db382155f482a557b832da6d63108112" datatype="html">
<source>Selector</source>
<target state="new">Selector</target>
<target state="translated">Selektor</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">439</context>
@ -7228,7 +7228,7 @@
</trans-unit>
<trans-unit id="135a208952e884a5ee78533cc4cc8559c702d555" datatype="html">
<source>HTTP Request Headers</source>
<target state="new">HTTP Request Headers</target>
<target state="translated">Nagłówki żądań HTTP</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">399</context>
@ -7236,7 +7236,7 @@
</trans-unit>
<trans-unit id="8635324470284879211" datatype="html">
<source>end of day</source>
<target state="new">end of day</target>
<target state="translated">koniec dnia</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">138</context>
@ -7244,7 +7244,7 @@
</trans-unit>
<trans-unit id="4547068148181074902" datatype="html">
<source>real-time</source>
<target state="new">real-time</target>
<target state="translated">w czasie rzeczywistym</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">142</context>
@ -7268,7 +7268,7 @@
</trans-unit>
<trans-unit id="cdcd7c871f3bc0326ee77e5aea82af1ef26f46f2" datatype="html">
<source>Market Data</source>
<target state="new">Market Data</target>
<target state="translated">Dane rynkowe</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">374</context>
@ -7485,7 +7485,7 @@
</trans-unit>
<trans-unit id="d59937471dbd9dee61cfd6402c3963bbfccc7b2b" datatype="html">
<source>Gather Recent Historical Market Data</source>
<target state="new">Gather Recent Historical Market Data</target>
<target state="translated">Zbierz najnowsze historyczne dane rynkowe</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">226</context>
@ -7592,7 +7592,7 @@
<target state="new"> Calculations are based on delayed market data and may not be displayed in real-time.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7604,20 +7604,20 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -590,7 +590,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -638,7 +638,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -778,7 +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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -786,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -794,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -878,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
@ -1330,7 +1330,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -1626,7 +1626,7 @@
<target state="translated">Marcadores</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1642,7 +1642,7 @@
<target state="translated">Dados do Relatório com Problema</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -2854,7 +2854,7 @@
<target state="translated">Voltar à Página Inicial</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="86022280b7836d1aff7fdc0182415b041ae3625c" datatype="html">
@ -3942,7 +3942,7 @@
<target state="translated">Plataformas</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
@ -5708,7 +5708,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6893,7 +6893,7 @@
<target state="new">Set API key</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7592,7 +7592,7 @@
<target state="new"> Calculations are based on delayed market data and may not be displayed in real-time.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7604,20 +7604,20 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -979,7 +979,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -1027,7 +1027,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -1320,18 +1320,18 @@
</trans-unit>
<trans-unit id="8122024350760043460" datatype="html">
<source>Do you really want to delete this coupon?</source>
<target state="translated">Önbelleği temizlemeyi gerçekten istiyor musunuz?</target>
<target state="translated">Bu kuponu gerçekten silmek 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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
<source>Do you really want to flush the cache?</source>
<target state="translated">Önbelleği temizlemeyi gerçekten istiyor musunuz</target>
<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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1339,7 +1339,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
@ -1379,7 +1379,7 @@
<target state="translated">Etiketler</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1455,7 +1455,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="7418ba6a757086804d7e00948f8b328050d99040" datatype="html">
@ -1543,12 +1543,12 @@
<target state="translated">Platformlar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source>
<target state="translated">Bu kullanıcıyı silmeyi gerçekten istiyor musunu?</target>
<target state="translated">Bu kullanıcıyı silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.component.ts</context>
<context context-type="linenumber">142</context>
@ -1744,7 +1744,7 @@
</trans-unit>
<trans-unit id="3ccabfc3dc288eaa2355ba43298c739f85951ec3" datatype="html">
<source>Get started</source>
<target state="translate">Haydi Başlayalım</target>
<target state="translated">Haydi Başlayalım</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">420</context>
@ -1971,7 +1971,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -2247,7 +2247,7 @@
<target state="translated">Rapor Veri Sorunu</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2573979fd7d8602db44b7b4ad493428bc354d2f5" datatype="html">
@ -4772,7 +4772,7 @@
<target state="translated">Ana Sayfaya Geri Dön</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="ed1d0d3031aba025b9bf280c1d7c54f44982ed46" datatype="html">
@ -5708,7 +5708,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">
@ -6893,7 +6893,7 @@
<target state="translated">API anahtarını ayarla</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7592,7 +7592,7 @@
<target state="translated"> Hesaplamalar gecikmeli piyasa verilerine dayanmaktadır ve gerçek zamanlı olarak görüntülenemeyebilir.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">

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

@ -1467,7 +1467,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -1515,7 +1515,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -1587,7 +1587,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1595,7 +1595,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1603,7 +1603,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1611,7 +1611,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1723,7 +1723,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="7418ba6a757086804d7e00948f8b328050d99040" datatype="html">
@ -1835,7 +1835,7 @@
<target state="translated">Встановити ключ API</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6ee0b8778b1e61a6434b8f1a92febacca34112a7" datatype="html">
@ -1843,7 +1843,7 @@
<target state="translated">Платформи</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
@ -1851,7 +1851,7 @@
<target state="translated">Теги</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1907,7 +1907,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
@ -2220,7 +2220,7 @@
</trans-unit>
<trans-unit id="76897e07c5670ce3b7710cc10c5e1c08b5f6a83a" datatype="html">
<source><x id="START_BLOCK_IF" equiv-text="@if ( SymbolProfile?.currency &amp;&amp; data.baseCurrency !== SymbolProfile?.currency ) {"/> Change with currency effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Change <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></source>
<target state="new"><x id="START_BLOCK_IF" equiv-text="seCurrency !== SymbolProfile?.currency ) {"/> Зміна з урахуванням валютного ефекту <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Зміна <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<target state="translated"><x id="START_BLOCK_IF" equiv-text="seCurrency !== SymbolProfile?.currency ) {"/> Зміна з урахуванням валютного ефекту <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Зміна <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">50</context>
@ -2228,7 +2228,7 @@
</trans-unit>
<trans-unit id="65ff514a2e167229e1a34b3712f2cf2908576d0f" datatype="html">
<source><x id="START_BLOCK_IF" equiv-text="@if ( SymbolProfile?.currency &amp;&amp; data.baseCurrency !== SymbolProfile?.currency ) {"/> Performance with currency effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Performance <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></source>
<target state="new"><x id="START_BLOCK_IF" equiv-text="seCurrency !== SymbolProfile?.currency ) {"/> Прибутковість з урахуванням валютного ефекту валюти <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Прибутковість <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<target state="translated"><x id="START_BLOCK_IF" equiv-text="seCurrency !== SymbolProfile?.currency ) {"/> Прибутковість з урахуванням валютного ефекту валюти <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Прибутковість <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">69</context>
@ -2343,7 +2343,7 @@
<target state="translated">Повідомити про збій даних</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="8204176479746810612" datatype="html">
@ -6115,7 +6115,7 @@
<target state="translated">Повернутися на головну сторінку</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="2263595996673750436" datatype="html">
@ -6656,7 +6656,7 @@
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
<source>Get access to 80’000+ tickers from over 50 exchanges</source>
<target state="new">Отримайте доступ до 100 000+ тікерів з понад 50 бірж</target>
<target state="translated">Отримайте доступ до 80 000+ тікерів з понад 50 бірж</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
@ -7592,7 +7592,7 @@
<target state="new"> Calculations are based on delayed market data and may not be displayed in real-time.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7604,20 +7604,20 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -965,7 +965,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -1012,7 +1012,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -1356,28 +1356,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">134</context>
<context context-type="linenumber">142</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">147</context>
<context context-type="linenumber">155</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">171</context>
<context context-type="linenumber">179</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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1472,7 +1472,7 @@
<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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="7418ba6a757086804d7e00948f8b328050d99040" datatype="html">
@ -1553,14 +1553,14 @@
<source>Platforms</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -1989,7 +1989,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -2243,7 +2243,7 @@
<source>Report Data Glitch</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2573979fd7d8602db44b7b4ad493428bc354d2f5" datatype="html">
@ -4632,7 +4632,7 @@
<source>Go back to Home Page</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="2263595996673750436" datatype="html">
@ -6233,7 +6233,7 @@
<source>Set API key</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -6827,7 +6827,7 @@
<source> Calculations are based on delayed market data and may not be displayed in real-time.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -6838,18 +6838,18 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
</body>

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

@ -1024,7 +1024,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">336</context>
<context context-type="linenumber">337</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>
@ -1072,7 +1072,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">343</context>
<context context-type="linenumber">344</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>
@ -1424,7 +1424,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">134</context>
<context context-type="linenumber">142</context>
</context-group>
</trans-unit>
<trans-unit id="297546430113071258" datatype="html">
@ -1432,7 +1432,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">147</context>
<context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="6470890277760887814" datatype="html">
@ -1440,7 +1440,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">171</context>
<context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="2712770700065625080" datatype="html">
@ -1448,7 +1448,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">191</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">
@ -1556,7 +1556,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">174</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="7418ba6a757086804d7e00948f8b328050d99040" datatype="html">
@ -1644,7 +1644,7 @@
<target state="translated">平台</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">137</context>
<context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
@ -1652,7 +1652,7 @@
<target state="translated">标签</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">143</context>
<context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
@ -2128,7 +2128,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="06ce3d665f2d87f69884667d21699ab1cc6fa585" datatype="html">
@ -2412,7 +2412,7 @@
<target state="translated">报告数据故障</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">409</context>
<context context-type="linenumber">407</context>
</context-group>
</trans-unit>
<trans-unit id="2573979fd7d8602db44b7b4ad493428bc354d2f5" datatype="html">
@ -5077,7 +5077,7 @@
<target state="translated">返回首页</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="2263595996673750436" datatype="html">
@ -6894,7 +6894,7 @@
<target state="translated">设置 API 密钥</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">113</context>
<context context-type="linenumber">112</context>
</context-group>
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
@ -7593,7 +7593,7 @@
<target state="translated"> 计算基于延迟的市场数据,可能无法实时显示。</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="793097298820646129" datatype="html">
@ -7605,20 +7605,20 @@
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.exceed" datatype="html">
<source> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="3920411961658116502" datatype="html">
<source>Demo user account has been synced.</source>
<target state="new">Demo user account has been synced.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">14</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="rule.fee-ratio-initial-investment.not-exceed" datatype="html">
<source> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </source>
<target state="new"> The fees do not exceed {thresholdMax}% of your initial investment ({feeRatio}%) </target>
<trans-unit id="18fe01d6ae816d6787148e59ea1a39d0bb542e24" datatype="html">
<source>Sync Demo User Account</source>
<target state="new">Sync Demo User Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">181</context>
</context-group>
</trans-unit>
</body>

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

@ -76,8 +76,6 @@ export const DERIVED_CURRENCIES = [
}
];
export const EMERGENCY_FUND_TAG_ID = '4452656d-9fa4-4bd0-ba38-70492e31d180';
export const GATHER_ASSET_PROFILE_PROCESS_JOB_NAME = 'GATHER_ASSET_PROFILE';
export const GATHER_ASSET_PROFILE_PROCESS_JOB_OPTIONS: JobOptions = {
attempts: 12,
@ -122,7 +120,9 @@ export const PROPERTY_CURRENCIES = 'CURRENCIES';
export const PROPERTY_DATA_SOURCE_MAPPING = 'DATA_SOURCE_MAPPING';
export const PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS =
'DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS';
export const PROPERTY_DEMO_ACCOUNT_ID = 'DEMO_ACCOUNT_ID';
export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
export const PROPERTY_DEMO_USER_ID_LEGACY = 'DEMO_USER_ID_LEGACY';
export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED';
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
@ -171,4 +171,7 @@ export const SUPPORTED_LANGUAGE_CODES = [
'zh'
];
export const TAG_ID_EMERGENCY_FUND = '4452656d-9fa4-4bd0-ba38-70492e31d180';
export const TAG_ID_DEMO = 'efa08cb3-9b9d-4974-ac68-db13a19c4874';
export const UNKNOWN_KEY = 'UNKNOWN';

2
libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts

@ -22,7 +22,7 @@ export interface PortfolioHoldingResponse {
grossPerformancePercentWithCurrencyEffect: number;
grossPerformanceWithCurrencyEffect: number;
historicalData: HistoricalDataItem[];
investment: number;
investmentInBaseCurrencyWithCurrencyEffect: number;
marketPrice: number;
marketPriceMax: number;
marketPriceMin: number;

1
libs/common/src/lib/permissions.ts

@ -45,6 +45,7 @@ export const permissions = {
readTags: 'readTags',
readWatchlist: 'readWatchlist',
reportDataGlitch: 'reportDataGlitch',
syncDemoUserAccount: 'syncDemoUserAccount',
toggleReadOnlyMode: 'toggleReadOnlyMode',
updateAccount: 'updateAccount',
updateAuthDevice: 'updateAuthDevice',

30
package-lock.json

@ -1,12 +1,12 @@
{
"name": "ghostfolio",
"version": "2.164.0",
"version": "2.165.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
"version": "2.164.0",
"version": "2.165.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
@ -47,7 +47,7 @@
"@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "5.4.0",
"alphavantage": "2.2.0",
"big.js": "6.2.2",
"big.js": "7.0.1",
"bootstrap": "4.6.2",
"bull": "4.16.5",
"chart.js": "4.4.9",
@ -72,7 +72,7 @@
"lodash": "4.17.21",
"marked": "15.0.4",
"ms": "3.0.0-canary.1",
"ng-extract-i18n-merge": "2.14.3",
"ng-extract-i18n-merge": "2.15.0",
"ngx-device-detector": "9.0.0",
"ngx-markdown": "19.0.0",
"ngx-skeleton-loader": "11.0.0",
@ -15220,9 +15220,9 @@
}
},
"node_modules/big.js": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz",
"integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==",
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-7.0.1.tgz",
"integrity": "sha512-iFgV784tD8kq4ccF1xtNMZnXeZzVuXWWM+ERFzKQjv+A5G9HC8CY3DuV45vgzFFcW+u2tIvmF95+AzWgs6BjCg==",
"license": "MIT",
"engines": {
"node": "*"
@ -27037,22 +27037,22 @@
"license": "MIT"
},
"node_modules/ng-extract-i18n-merge": {
"version": "2.14.3",
"resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.14.3.tgz",
"integrity": "sha512-5zYuS/divhP2Tk0fizk7D8q5TyhwRjyj/DgaEgurrRwkWfIZFDUGc98eTziR3vIMsb9/sgbUSyeA+8LllCkKyA==",
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.15.0.tgz",
"integrity": "sha512-43ew7btSrRJ34BHfRkjvvW8wXxfyFiM5rbFU22f/ZuEK1wpClV8lNaF09CYixY1+ycMpKLLyW+olj1Nj3kvs4g==",
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0 || ^0.1601.0 || ^0.1700.0 || ^0.1800.0 || ^0.1900.0",
"@angular-devkit/core": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"@angular-devkit/schematics": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"@schematics/angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0 || ^0.1601.0 || ^0.1700.0 || ^0.1800.0 || ^0.1900.0 || ^0.2000.0 || 0.2000.0-rc.2",
"@angular-devkit/core": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2",
"@angular-devkit/schematics": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2",
"@schematics/angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2",
"xmldoc": "^1.1.3"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"@angular-devkit/build-angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
"@angular-devkit/build-angular": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || 20.0.0-rc.2"
}
},
"node_modules/ng-extract-i18n-merge/node_modules/@angular-devkit/architect": {

6
package.json

@ -1,6 +1,6 @@
{
"name": "ghostfolio",
"version": "2.164.0",
"version": "2.165.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
@ -93,7 +93,7 @@
"@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "5.4.0",
"alphavantage": "2.2.0",
"big.js": "6.2.2",
"big.js": "7.0.1",
"bootstrap": "4.6.2",
"bull": "4.16.5",
"chart.js": "4.4.9",
@ -118,7 +118,7 @@
"lodash": "4.17.21",
"marked": "15.0.4",
"ms": "3.0.0-canary.1",
"ng-extract-i18n-merge": "2.14.3",
"ng-extract-i18n-merge": "2.15.0",
"ngx-device-detector": "9.0.0",
"ngx-markdown": "19.0.0",
"ngx-skeleton-loader": "11.0.0",

10
prisma/schema.prisma

@ -233,11 +233,11 @@ model Subscription {
}
model Tag {
id String @id @default(uuid())
name String
orders Order[]
userId String?
User User? @relation(fields: [userId], onDelete: Cascade, references: [id])
activities Order[]
id String @id @default(uuid())
name String
userId String?
User User? @relation(fields: [userId], onDelete: Cascade, references: [id])
@@unique([name, userId])
@@index([name])

Loading…
Cancel
Save