Browse Source

Merge branch 'main' into pr/5848

pull/7146/head
Thomas Kaul 3 weeks ago
parent
commit
f80e0551a8
  1. 1
      .gitignore
  2. 82
      CHANGELOG.md
  3. 8
      apps/api/src/app/activities/activities.service.ts
  4. 4
      apps/api/src/app/admin/admin.controller.ts
  5. 2
      apps/api/src/app/admin/admin.module.ts
  6. 84
      apps/api/src/app/admin/admin.service.ts
  7. 2
      apps/api/src/app/admin/queue/queue.service.ts
  8. 11
      apps/api/src/app/asset/asset.controller.ts
  9. 4
      apps/api/src/app/asset/asset.module.ts
  10. 58
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
  11. 11
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
  12. 61
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
  13. 8
      apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts
  14. 9
      apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
  15. 61
      apps/api/src/app/endpoints/market-data/market-data.controller.ts
  16. 12
      apps/api/src/app/endpoints/market-data/market-data.module.ts
  17. 30
      apps/api/src/app/endpoints/watchlist/watchlist.service.ts
  18. 9
      apps/api/src/app/import/import.service.ts
  19. 2
      apps/api/src/app/info/info.service.ts
  20. 4
      apps/api/src/app/portfolio/current-rate.service.ts
  21. 3
      apps/api/src/app/portfolio/portfolio.service.spec.ts
  22. 25
      apps/api/src/app/portfolio/portfolio.service.ts
  23. 37
      apps/api/src/app/symbol/symbol.service.ts
  24. 8
      apps/api/src/events/asset-profile-changed.listener.ts
  25. 6
      apps/api/src/helper/country.helper.ts
  26. 67
      apps/api/src/helper/data-source.helper.ts
  27. 2
      apps/api/src/interceptors/performance-logging/performance-logging.service.ts
  28. 2
      apps/api/src/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor.ts
  29. 26
      apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts
  30. 8
      apps/api/src/services/benchmark/benchmark.service.ts
  31. 5
      apps/api/src/services/configuration/configuration.service.ts
  32. 47
      apps/api/src/services/cron/cron.module.ts
  33. 10
      apps/api/src/services/cron/cron.service.ts
  34. 7
      apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
  35. 158
      apps/api/src/services/data-provider/data-provider.service.ts
  36. 6
      apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
  37. 1
      apps/api/src/services/data-provider/interfaces/data-provider.interface.ts
  38. 15
      apps/api/src/services/data-provider/manual/manual.service.ts
  39. 19
      apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts
  40. 25
      apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts
  41. 2
      apps/api/src/services/interfaces/environment.interface.ts
  42. 21
      apps/api/src/services/market-data/market-data.service.ts
  43. 3
      apps/api/src/services/queues/data-gathering/data-gathering.module.ts
  44. 21
      apps/api/src/services/queues/data-gathering/data-gathering.processor.ts
  45. 265
      apps/api/src/services/queues/data-gathering/data-gathering.service.ts
  46. 37
      apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts
  47. 2
      apps/api/src/services/symbol-profile/symbol-profile.service.ts
  48. 4
      apps/api/src/services/twitter-bot/twitter-bot.service.ts
  49. 12
      apps/client/src/app/app.component.ts
  50. 2
      apps/client/src/app/components/access-table/access-table.component.html
  51. 10
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
  52. 2
      apps/client/src/app/components/admin-jobs/admin-jobs.html
  53. 27
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  54. 5
      apps/client/src/app/components/admin-market-data/admin-market-data.html
  55. 23
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  56. 24
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
  57. 6
      apps/client/src/app/components/admin-platform/admin-platform.component.html
  58. 6
      apps/client/src/app/components/admin-platform/admin-platform.component.ts
  59. 30
      apps/client/src/app/components/admin-settings/admin-settings.component.scss
  60. 6
      apps/client/src/app/components/admin-tag/admin-tag.component.html
  61. 6
      apps/client/src/app/components/admin-tag/admin-tag.component.ts
  62. 71
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  63. 54
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
  64. 4
      apps/client/src/app/components/home-market/home-market.component.ts
  65. 2
      apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
  66. 8
      apps/client/src/app/components/user-account-settings/user-account-settings.html
  67. 6
      apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
  68. 11
      apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
  69. 7
      apps/client/src/app/pages/accounts/transfer-balance/interfaces/interfaces.ts
  70. 70
      apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts
  71. 6
      apps/client/src/app/pages/api/api-page.component.ts
  72. 8
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
  73. 11
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss
  74. 299
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
  75. 2
      apps/client/src/app/pages/portfolio/allocations/allocations-page.html
  76. 6
      apps/client/src/app/pages/portfolio/allocations/interfaces/interfaces.ts
  77. 87
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  78. 116
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
  79. 242
      apps/client/src/locales/messages.ca.xlf
  80. 242
      apps/client/src/locales/messages.de.xlf
  81. 242
      apps/client/src/locales/messages.es.xlf
  82. 242
      apps/client/src/locales/messages.fr.xlf
  83. 242
      apps/client/src/locales/messages.it.xlf
  84. 242
      apps/client/src/locales/messages.ko.xlf
  85. 242
      apps/client/src/locales/messages.nl.xlf
  86. 242
      apps/client/src/locales/messages.pl.xlf
  87. 242
      apps/client/src/locales/messages.pt.xlf
  88. 242
      apps/client/src/locales/messages.tr.xlf
  89. 242
      apps/client/src/locales/messages.uk.xlf
  90. 208
      apps/client/src/locales/messages.xlf
  91. 242
      apps/client/src/locales/messages.zh.xlf
  92. 11
      libs/common/src/lib/config.ts
  93. 12
      libs/common/src/lib/dtos/update-asset-profile.dto.ts
  94. 19
      libs/common/src/lib/helper.ts
  95. 8
      libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts
  96. 2
      libs/common/src/lib/interfaces/holding.interface.ts
  97. 4
      libs/common/src/lib/interfaces/index.ts
  98. 2
      libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
  99. 13
      libs/common/src/lib/interfaces/responses/export-response.interface.ts
  100. 4
      libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts

1
.gitignore

@ -32,6 +32,7 @@ npm-debug.log
.env.prod .env.prod
.github/instructions/nx.instructions.md .github/instructions/nx.instructions.md
.nx/cache .nx/cache
.nx/migrate-runs
.nx/polygraph .nx/polygraph
.nx/self-healing .nx/self-healing
.nx/workspace-data .nx/workspace-data

82
CHANGELOG.md

@ -5,16 +5,95 @@ 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/), 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). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased ## 3.17.0 - 2026-06-26
### Added
- Added `zod` as a root dependency to resolve peer dependency warnings
### Changed
- Improved the error message styling in the import activities dialog
- Improved the grantee display in the access table to share the portfolio
- Improved the country mapping for data providers
- Upgraded `bull-board` from version `7.2.1` to `8.0.1`
- Upgraded `Nx` from version `22.7.5` to `23.0.1`
- Upgraded `prettier` from version `3.8.3` to `3.8.4`
### Fixed
- Improved the table headers’ alignment in the queue jobs table of the admin control panel
## 3.16.0 - 2026-06-24
### Added
- Extended the user account settings with a copy-to-clipboard button for the user id
- Added pagination to the platform management of the admin control panel
- Added pagination to the tag management of the admin control panel
- Extended the asset profile details dialog of the admin control panel with a copy-to-clipboard button for the ISIN number
- Extended the asset profile details dialog of the admin control panel with a copy-to-clipboard button for the symbol
### Changed
- Improved the throughput of the market data gathering queue by applying the rate limit per data source
- Decreased the rate limiter duration of the market data gathering queue jobs from 4 to 3 seconds
- Removed the deprecated `SymbolProfile` field from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol`
- Upgraded `@simplewebauthn/browser` and `@simplewebauthn/server` from version `13.2.2` to `13.3`
### Fixed
- Fixed an issue with hourly market data updates not refreshing prices for asset profiles with `MANUAL` data source
- Fixed an issue with the log context formatting in the performance logging service
## 3.15.1 - 2026-06-23
### Changed
- Improved the dynamic numerical precision for various values in the account detail dialog on mobile
- Improved the dynamic numerical precision for various values in the holding detail dialog on mobile
- Upgraded `@internationalized/number` from version `3.6.6` to `3.6.7`
### Fixed
- Fixed an issue where symbols with special characters caused API request failures by URL encoding the symbol
- Fixed the disabled state of the delete action in the asset profiles actions menu of the historical market data table in the admin control panel
- Fixed the persistence of an empty `locale` string in the scraper configuration
- Fixed a transaction timeout that prevented gathering historical market data for symbols with a long history
- Fixed an exception in various portfolio endpoints when historical exchange rate data is missing
## 3.14.0 - 2026-06-22
### Added
- Exposed the `ENABLE_FEATURE_CRON` environment variable to control scheduled cron job execution
- Exposed the `PROCESSOR_GATHER_STATISTICS_CONCURRENCY` environment variable to control the concurrency of the statistics gathering queue processor
### Changed
- Consolidated the exchange rates to be gathered with hourly market data
- Improved the language localization for German (`de`)
- Upgraded `@openrouter/ai-sdk-provider` from version `2.9.0` to `2.9.1`
- Upgraded `undici` from version `7.24.4` to `8.5.0`
### Fixed
- Fixed an issue in the data provider service where asset profiles and historical data could be missing for symbols that exist in multiple data sources by keying the responses by the asset profile identifier
- Resolved an exception in the benchmarks service when the current market price is unavailable
## 3.13.0 - 2026-06-20
### Added ### Added
- Added an icon to indicate external links in the page tabs component - Added an icon to indicate external links in the page tabs component
- Added the Korean (`ko`) language to the footer - Added the Korean (`ko`) language to the footer
- Added a data gathering frequency (`DAILY` or `HOURLY`) to the asset profile to control the market data gathering interval
### Changed ### Changed
- Changed the _Fear & Greed Index_ (market mood) in the markets overview to use the stored market data instead of a live quote
- Moved the endpoint to get the asset profiles from `GET api/v1/admin/market-data` to `GET api/v1/asset-profiles` - Moved the endpoint to get the asset profiles from `GET api/v1/admin/market-data` to `GET api/v1/asset-profiles`
- Moved the endpoint to get the asset profile details from `GET api/v1/market-data/:dataSource/:symbol` to `GET api/v1/asset-profiles/:dataSource/:symbol`
- Added the selected asset profile count to the delete menu item of the historical market data table in the admin control panel - Added the selected asset profile count to the delete menu item of the historical market data table in the admin control panel
- Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel - Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel
- Improved the sorting to be case-insensitive in the platform management of the admin control panel - Improved the sorting to be case-insensitive in the platform management of the admin control panel
@ -25,6 +104,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed ### Fixed
- Fixed an issue with the localization of the country names - Fixed an issue with the localization of the country names
- Fixed an issue in the data provider service where quotes could be missing for symbols that exist in multiple data sources by keying the quotes response by the asset profile identifier
## 3.12.0 - 2026-06-17 ## 3.12.0 - 2026-06-17

8
apps/api/src/app/activities/activities.service.ts

@ -746,10 +746,10 @@ export class ActivitiesService {
const value = new Big(order.quantity).mul(order.unitPrice).toNumber(); const value = new Big(order.quantity).mul(order.unitPrice).toNumber();
const [ const [
feeInAssetProfileCurrency, feeInAssetProfileCurrency = 0,
feeInBaseCurrency, feeInBaseCurrency = 0,
unitPriceInAssetProfileCurrency, unitPriceInAssetProfileCurrency = 0,
valueInBaseCurrency valueInBaseCurrency = 0
] = await Promise.all([ ] = await Promise.all([
this.exchangeRateDataService.toCurrencyAtDate( this.exchangeRateDataService.toCurrencyAtDate(
order.fee, order.fee,

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

@ -86,8 +86,8 @@ export class AdminController {
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)
@Post('gather') @Post('gather')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async gather7Days(): Promise<void> { public async gatherRecentMarketData(): Promise<void> {
this.dataGatheringService.gather7Days(); this.dataGatheringService.gatherRecentMarketData();
} }
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)

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

@ -1,4 +1,3 @@
import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
@ -19,7 +18,6 @@ import { QueueModule } from './queue/queue.module';
@Module({ @Module({
imports: [ imports: [
ActivitiesModule,
BenchmarkModule, BenchmarkModule,
ConfigurationModule, ConfigurationModule,
DataGatheringQueueModule, DataGatheringQueueModule,

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

@ -1,4 +1,3 @@
import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service';
import { environment } from '@ghostfolio/api/environments/environment'; import { environment } from '@ghostfolio/api/environments/environment';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
@ -12,14 +11,15 @@ import {
PROPERTY_IS_READ_ONLY_MODE, PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED PROPERTY_IS_USER_SIGNUP_ENABLED
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; import {
getAssetProfileIdentifier,
getCurrencyFromSymbol
} from '@ghostfolio/common/helper';
import { import {
AdminData, AdminData,
AdminMarketDataDetails,
AdminUserResponse, AdminUserResponse,
AdminUsersResponse, AdminUsersResponse,
AssetProfileIdentifier, AssetProfileIdentifier
EnhancedSymbolProfile
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { import {
@ -42,7 +42,6 @@ import { StatusCodes, getReasonPhrase } from 'http-status-codes';
@Injectable() @Injectable()
export class AdminService { export class AdminService {
public constructor( public constructor(
private readonly activitiesService: ActivitiesService,
private readonly configurationService: ConfigurationService, private readonly configurationService: ConfigurationService,
private readonly dataProviderService: DataProviderService, private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService, private readonly exchangeRateDataService: ExchangeRateDataService,
@ -72,14 +71,17 @@ export class AdminService {
{ dataSource, symbol } { dataSource, symbol }
]); ]);
if (!assetProfiles[symbol]?.currency) { const assetProfile =
assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })];
if (!assetProfile?.currency) {
throw new BadRequestException( throw new BadRequestException(
`Asset profile not found for ${symbol} (${dataSource})` `Asset profile not found for ${symbol} (${dataSource})`
); );
} }
return this.symbolProfileService.add( return this.symbolProfileService.add(
assetProfiles[symbol] as Prisma.SymbolProfileCreateInput assetProfile as Prisma.SymbolProfileCreateInput
); );
} catch (error) { } catch (error) {
if ( if (
@ -176,61 +178,6 @@ export class AdminService {
}; };
} }
public async getMarketDataBySymbol({
dataSource,
symbol
}: AssetProfileIdentifier): Promise<AdminMarketDataDetails> {
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
let currency: EnhancedSymbolProfile['currency'] = '-';
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
const isCurrencyAssetProfile = isCurrency(getCurrencyFromSymbol(symbol));
if (isCurrencyAssetProfile) {
currency = getCurrencyFromSymbol(symbol);
({ activitiesCount, dateOfFirstActivity } =
await this.activitiesService.getStatisticsByCurrency(currency));
}
const [[assetProfile], marketData] = await Promise.all([
this.symbolProfileService.getSymbolProfiles([
{
dataSource,
symbol
}
]),
this.marketDataService.marketDataItems({
orderBy: {
date: 'asc'
},
where: {
dataSource,
symbol
}
})
]);
if (assetProfile) {
assetProfile.dataProviderInfo = this.dataProviderService
.getDataProvider(assetProfile.dataSource)
.getDataProviderInfo();
}
return {
marketData,
assetProfile: assetProfile ?? {
activitiesCount,
currency,
dataSource,
dateOfFirstActivity,
symbol,
assetClass: isCurrencyAssetProfile ? AssetClass.LIQUIDITY : undefined,
assetSubClass: isCurrencyAssetProfile ? AssetSubClass.CASH : undefined,
isActive: true
}
};
}
public async getUser(id: string): Promise<AdminUserResponse> { public async getUser(id: string): Promise<AdminUserResponse> {
const [user] = await this.getUsersWithAnalytics({ const [user] = await this.getUsersWithAnalytics({
where: { id } where: { id }
@ -241,7 +188,7 @@ export class AdminService {
} }
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
const subscriptions = await this.prismaService.subscription.findMany({ user.subscriptions = await this.prismaService.subscription.findMany({
orderBy: { orderBy: {
expiresAt: 'desc' expiresAt: 'desc'
}, },
@ -249,13 +196,6 @@ export class AdminService {
userId: id userId: id
} }
}); });
user.subscriptions = subscriptions.map((subscription) => {
return {
...subscription,
price: subscription.price ?? 0
};
});
} }
return user; return user;
@ -287,6 +227,7 @@ export class AdminService {
comment, comment,
countries, countries,
currency, currency,
dataGatheringFrequency,
dataSource: newDataSource, dataSource: newDataSource,
holdings, holdings,
isActive, isActive,
@ -370,6 +311,7 @@ export class AdminService {
const updatedSymbolProfile: Prisma.SymbolProfileUpdateInput = { const updatedSymbolProfile: Prisma.SymbolProfileUpdateInput = {
comment, comment,
currency, currency,
dataGatheringFrequency,
dataSource, dataSource,
isActive, isActive,
scraperConfiguration, scraperConfiguration,

2
apps/api/src/app/admin/queue/queue.service.ts

@ -56,7 +56,7 @@ export class QueueService {
} }
public async getJobs({ public async getJobs({
limit = 1000, limit = 5000,
status = QUEUE_JOB_STATUS_LIST status = QUEUE_JOB_STATUS_LIST
}: { }: {
limit?: number; limit?: number;

11
apps/api/src/app/asset/asset.controller.ts

@ -1,4 +1,4 @@
import { AdminService } from '@ghostfolio/api/app/admin/admin.service'; import { AssetProfilesService } from '@ghostfolio/api/app/endpoints/asset-profiles/asset-profiles.service';
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import type { AssetResponse } from '@ghostfolio/common/interfaces'; import type { AssetResponse } from '@ghostfolio/common/interfaces';
@ -9,7 +9,9 @@ import { pick } from 'lodash';
@Controller('asset') @Controller('asset')
export class AssetController { export class AssetController {
public constructor(private readonly adminService: AdminService) {} public constructor(
private readonly assetProfilesService: AssetProfilesService
) {}
@Get(':dataSource/:symbol') @Get(':dataSource/:symbol')
@UseInterceptors(TransformDataSourceInRequestInterceptor) @UseInterceptors(TransformDataSourceInRequestInterceptor)
@ -19,7 +21,10 @@ export class AssetController {
@Param('symbol') symbol: string @Param('symbol') symbol: string
): Promise<AssetResponse> { ): Promise<AssetResponse> {
const { assetProfile, marketData } = const { assetProfile, marketData } =
await this.adminService.getMarketDataBySymbol({ dataSource, symbol }); await this.assetProfilesService.getAssetProfile({
dataSource,
symbol
});
return { return {
marketData, marketData,

4
apps/api/src/app/asset/asset.module.ts

@ -1,4 +1,4 @@
import { AdminModule } from '@ghostfolio/api/app/admin/admin.module'; import { AssetProfilesModule } from '@ghostfolio/api/app/endpoints/asset-profiles/asset-profiles.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
@ -9,7 +9,7 @@ import { AssetController } from './asset.controller';
@Module({ @Module({
controllers: [AssetController], controllers: [AssetController],
imports: [ imports: [
AdminModule, AssetProfilesModule,
TransformDataSourceInRequestModule, TransformDataSourceInRequestModule,
TransformDataSourceInResponseModule TransformDataSourceInResponseModule
] ]

58
apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts

@ -1,11 +1,17 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; 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 { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos';
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper';
import { AssetProfileResponse } from '@ghostfolio/common/interfaces';
import { import {
AssetProfilesResponse, AssetProfilesResponse,
EnhancedSymbolProfile EnhancedSymbolProfile
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { hasPermission } from '@ghostfolio/common/permissions';
import { permissions } from '@ghostfolio/common/permissions'; import { permissions } from '@ghostfolio/common/permissions';
import { MarketDataPreset, RequestWithUser } from '@ghostfolio/common/types'; import { MarketDataPreset, RequestWithUser } from '@ghostfolio/common/types';
@ -18,7 +24,8 @@ import {
Param, Param,
Patch, Patch,
Query, Query,
UseGuards UseGuards,
UseInterceptors
} from '@nestjs/common'; } from '@nestjs/common';
import { REQUEST } from '@nestjs/core'; import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport'; import { AuthGuard } from '@nestjs/passport';
@ -32,7 +39,8 @@ export class AssetProfilesController {
public constructor( public constructor(
private readonly apiService: ApiService, private readonly apiService: ApiService,
private readonly assetProfilesService: AssetProfilesService, private readonly assetProfilesService: AssetProfilesService,
@Inject(REQUEST) private readonly request: RequestWithUser @Inject(REQUEST) private readonly request: RequestWithUser,
private readonly symbolProfileService: SymbolProfileService
) {} ) {}
@Get() @Get()
@ -64,6 +72,52 @@ export class AssetProfilesController {
}); });
} }
@Get(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt'))
@UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getAssetProfile(
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
): Promise<AssetProfileResponse> {
const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
{ dataSource, symbol }
]);
if (!assetProfile && !isCurrency(getCurrencyFromSymbol(symbol))) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
const canReadAllAssetProfiles = hasPermission(
this.request.user.permissions,
permissions.readMarketData
);
const canReadOwnAssetProfile =
assetProfile?.userId === this.request.user.id &&
hasPermission(
this.request.user.permissions,
permissions.readMarketDataOfOwnAssetProfile
);
if (!canReadAllAssetProfiles && !canReadOwnAssetProfile) {
throw new HttpException(
assetProfile?.userId
? getReasonPhrase(StatusCodes.NOT_FOUND)
: getReasonPhrase(StatusCodes.FORBIDDEN),
assetProfile?.userId ? StatusCodes.NOT_FOUND : StatusCodes.FORBIDDEN
);
}
return this.assetProfilesService.getAssetProfile({
dataSource,
symbol
});
}
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)
@Patch(':dataSource/:symbol') @Patch(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)

11
apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts

@ -1,7 +1,11 @@
import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module'; import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module';
import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.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 { 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'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
@ -12,13 +16,18 @@ import { AssetProfilesService } from './asset-profiles.service';
@Module({ @Module({
controllers: [AssetProfilesController], controllers: [AssetProfilesController],
exports: [AssetProfilesService],
imports: [ imports: [
ActivitiesModule, ActivitiesModule,
ApiModule, ApiModule,
BenchmarkModule, BenchmarkModule,
DataProviderModule,
ExchangeRateDataModule, ExchangeRateDataModule,
MarketDataModule,
PrismaModule, PrismaModule,
SymbolProfileModule SymbolProfileModule,
TransformDataSourceInRequestModule,
TransformDataSourceInResponseModule
], ],
providers: [AssetProfilesService] providers: [AssetProfilesService]
}) })

61
apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts

@ -1,6 +1,8 @@
import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service'; import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service';
import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos';
@ -11,8 +13,9 @@ import {
isCurrency isCurrency
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
import { import {
AssetProfileItem, AdminMarketDataDetails,
AssetProfileIdentifier, AssetProfileIdentifier,
AssetProfileItem,
AssetProfilesResponse, AssetProfilesResponse,
EnhancedSymbolProfile, EnhancedSymbolProfile,
Filter Filter
@ -28,11 +31,67 @@ export class AssetProfilesService {
public constructor( public constructor(
private readonly activitiesService: ActivitiesService, private readonly activitiesService: ActivitiesService,
private readonly benchmarkService: BenchmarkService, private readonly benchmarkService: BenchmarkService,
private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService, private readonly exchangeRateDataService: ExchangeRateDataService,
private readonly marketDataService: MarketDataService,
private readonly prismaService: PrismaService, private readonly prismaService: PrismaService,
private readonly symbolProfileService: SymbolProfileService private readonly symbolProfileService: SymbolProfileService
) {} ) {}
public async getAssetProfile({
dataSource,
symbol
}: AssetProfileIdentifier): Promise<AdminMarketDataDetails> {
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
let currency: EnhancedSymbolProfile['currency'] = '-';
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
const isCurrencyAssetProfile = isCurrency(getCurrencyFromSymbol(symbol));
if (isCurrencyAssetProfile) {
currency = getCurrencyFromSymbol(symbol);
({ activitiesCount, dateOfFirstActivity } =
await this.activitiesService.getStatisticsByCurrency(currency));
}
const [[assetProfile], marketData] = await Promise.all([
this.symbolProfileService.getSymbolProfiles([
{
dataSource,
symbol
}
]),
this.marketDataService.marketDataItems({
orderBy: {
date: 'asc'
},
where: {
dataSource,
symbol
}
})
]);
if (assetProfile) {
assetProfile.dataProviderInfo = this.dataProviderService
.getDataProvider(assetProfile.dataSource)
.getDataProviderInfo();
}
return {
marketData,
assetProfile: assetProfile ?? {
activitiesCount,
currency,
dataSource,
dateOfFirstActivity,
symbol,
assetClass: isCurrencyAssetProfile ? AssetClass.LIQUIDITY : undefined,
assetSubClass: isCurrencyAssetProfile ? AssetSubClass.CASH : undefined,
isActive: true
}
};
}
public async getAssetProfiles({ public async getAssetProfiles({
filters = [], filters = [],
presetId, presetId,

8
apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts

@ -81,6 +81,14 @@ export class BenchmarksService {
}) })
]); ]);
if (!currentSymbolItem) {
this.logger.error(
`No current market price is available for ${symbol} (${dataSource})`
);
return { marketData };
}
const exchangeRates = const exchangeRates =
await this.exchangeRateDataService.getExchangeRatesByCurrency({ await this.exchangeRateDataService.getExchangeRatesByCurrency({
startDate, startDate,

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

@ -16,6 +16,7 @@ import {
DERIVED_CURRENCIES DERIVED_CURRENCIES
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config'; import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { import {
DataProviderGhostfolioAssetProfileResponse, DataProviderGhostfolioAssetProfileResponse,
DataProviderHistoricalResponse, DataProviderHistoricalResponse,
@ -60,7 +61,13 @@ export class GhostfolioService {
} }
]) ])
.then(async (assetProfiles) => { .then(async (assetProfiles) => {
const assetProfile = assetProfiles[symbol]; const assetProfile =
assetProfiles[
getAssetProfileIdentifier({
symbol,
dataSource: dataProviderService.getName()
})
];
const dataSourceOrigin = DataSource.GHOSTFOLIO; const dataSourceOrigin = DataSource.GHOSTFOLIO;
if (assetProfile) { if (assetProfile) {

61
apps/api/src/app/endpoints/market-data/market-data.controller.ts

@ -1,9 +1,6 @@
import { AdminService } from '@ghostfolio/api/app/admin/admin.service';
import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service';
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; 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 { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { import {
@ -14,10 +11,7 @@ import {
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { UpdateBulkMarketDataDto } from '@ghostfolio/common/dtos'; import { UpdateBulkMarketDataDto } from '@ghostfolio/common/dtos';
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper';
import { import { MarketDataOfMarketsResponse } from '@ghostfolio/common/interfaces';
MarketDataDetailsResponse,
MarketDataOfMarketsResponse
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { RequestWithUser } from '@ghostfolio/common/types'; import { RequestWithUser } from '@ghostfolio/common/types';
@ -30,8 +24,7 @@ import {
Param, Param,
Post, Post,
Query, Query,
UseGuards, UseGuards
UseInterceptors
} from '@nestjs/common'; } from '@nestjs/common';
import { REQUEST } from '@nestjs/core'; import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport'; import { AuthGuard } from '@nestjs/passport';
@ -42,7 +35,6 @@ import { getReasonPhrase, StatusCodes } from 'http-status-codes';
@Controller('market-data') @Controller('market-data')
export class MarketDataController { export class MarketDataController {
public constructor( public constructor(
private readonly adminService: AdminService,
private readonly marketDataService: MarketDataService, private readonly marketDataService: MarketDataService,
@Inject(REQUEST) private readonly request: RequestWithUser, @Inject(REQUEST) private readonly request: RequestWithUser,
private readonly symbolProfileService: SymbolProfileService, private readonly symbolProfileService: SymbolProfileService,
@ -64,14 +56,16 @@ export class MarketDataController {
dataGatheringItem: { dataGatheringItem: {
dataSource: ghostfolioFearAndGreedIndexDataSourceCryptocurrencies, dataSource: ghostfolioFearAndGreedIndexDataSourceCryptocurrencies,
symbol: ghostfolioFearAndGreedIndexSymbolCryptocurrencies symbol: ghostfolioFearAndGreedIndexSymbolCryptocurrencies
} },
useIntradayData: true
}), }),
this.symbolService.get({ this.symbolService.get({
includeHistoricalData, includeHistoricalData,
dataGatheringItem: { dataGatheringItem: {
dataSource: ghostfolioFearAndGreedIndexDataSourceStocks, dataSource: ghostfolioFearAndGreedIndexDataSourceStocks,
symbol: ghostfolioFearAndGreedIndexSymbolStocks symbol: ghostfolioFearAndGreedIndexSymbolStocks
} },
useIntradayData: true
}) })
]); ]);
@ -87,49 +81,6 @@ export class MarketDataController {
}; };
} }
@Get(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt'))
@UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getMarketDataBySymbol(
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
): Promise<MarketDataDetailsResponse> {
const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
{ dataSource, symbol }
]);
if (!assetProfile && !isCurrency(getCurrencyFromSymbol(symbol))) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
const canReadAllAssetProfiles = hasPermission(
this.request.user.permissions,
permissions.readMarketData
);
const canReadOwnAssetProfile =
assetProfile?.userId === this.request.user.id &&
hasPermission(
this.request.user.permissions,
permissions.readMarketDataOfOwnAssetProfile
);
if (!canReadAllAssetProfiles && !canReadOwnAssetProfile) {
throw new HttpException(
assetProfile?.userId
? getReasonPhrase(StatusCodes.NOT_FOUND)
: getReasonPhrase(StatusCodes.FORBIDDEN),
assetProfile?.userId ? StatusCodes.NOT_FOUND : StatusCodes.FORBIDDEN
);
}
return this.adminService.getMarketDataBySymbol({ dataSource, symbol });
}
@Post(':dataSource/:symbol') @Post(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt')) @UseGuards(AuthGuard('jwt'))
public async updateMarketData( public async updateMarketData(

12
apps/api/src/app/endpoints/market-data/market-data.module.ts

@ -1,7 +1,4 @@
import { AdminModule } from '@ghostfolio/api/app/admin/admin.module';
import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { MarketDataModule as MarketDataServiceModule } from '@ghostfolio/api/services/market-data/market-data.module'; import { MarketDataModule as MarketDataServiceModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
@ -11,13 +8,6 @@ import { MarketDataController } from './market-data.controller';
@Module({ @Module({
controllers: [MarketDataController], controllers: [MarketDataController],
imports: [ imports: [MarketDataServiceModule, SymbolModule, SymbolProfileModule]
AdminModule,
MarketDataServiceModule,
SymbolModule,
SymbolProfileModule,
TransformDataSourceInRequestModule,
TransformDataSourceInResponseModule
]
}) })
export class MarketDataModule {} export class MarketDataModule {}

30
apps/api/src/app/endpoints/watchlist/watchlist.service.ts

@ -4,10 +4,14 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { WatchlistResponse } from '@ghostfolio/common/interfaces'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import {
AssetProfileIdentifier,
WatchlistResponse
} from '@ghostfolio/common/interfaces';
import { BadRequestException, Injectable } from '@nestjs/common'; import { BadRequestException, Injectable } from '@nestjs/common';
import { DataSource, Prisma } from '@prisma/client'; import { Prisma } from '@prisma/client';
@Injectable() @Injectable()
export class WatchlistService { export class WatchlistService {
@ -24,11 +28,7 @@ export class WatchlistService {
dataSource, dataSource,
symbol, symbol,
userId userId
}: { }: { userId: string } & AssetProfileIdentifier): Promise<void> {
dataSource: DataSource;
symbol: string;
userId: string;
}): Promise<void> {
const symbolProfile = await this.prismaService.symbolProfile.findUnique({ const symbolProfile = await this.prismaService.symbolProfile.findUnique({
where: { where: {
dataSource_symbol: { dataSource, symbol } dataSource_symbol: { dataSource, symbol }
@ -40,14 +40,17 @@ export class WatchlistService {
{ dataSource, symbol } { dataSource, symbol }
]); ]);
if (!assetProfiles[symbol]?.currency) { const assetProfile =
assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })];
if (!assetProfile?.currency) {
throw new BadRequestException( throw new BadRequestException(
`Asset profile not found for ${symbol} (${dataSource})` `Asset profile not found for ${symbol} (${dataSource})`
); );
} }
await this.symbolProfileService.add( await this.symbolProfileService.add(
assetProfiles[symbol] as Prisma.SymbolProfileCreateInput assetProfile as Prisma.SymbolProfileCreateInput
); );
} }
@ -72,11 +75,7 @@ export class WatchlistService {
dataSource, dataSource,
symbol, symbol,
userId userId
}: { }: { userId: string } & AssetProfileIdentifier) {
dataSource: DataSource;
symbol: string;
userId: string;
}) {
await this.prismaService.user.update({ await this.prismaService.user.update({
data: { data: {
watchlist: { watchlist: {
@ -127,7 +126,8 @@ export class WatchlistService {
const performancePercent = const performancePercent =
this.benchmarkService.calculateChangeInPercentage( this.benchmarkService.calculateChangeInPercentage(
allTimeHigh?.marketPrice, allTimeHigh?.marketPrice,
quotes[symbol]?.marketPrice quotes[getAssetProfileIdentifier({ dataSource, symbol })]
?.marketPrice
); );
return { return {

9
apps/api/src/app/import/import.service.ts

@ -536,6 +536,8 @@ export class ImportService {
url, url,
comment: assetProfile.comment, comment: assetProfile.comment,
currency: assetProfile.currency, currency: assetProfile.currency,
dataGatheringFrequency:
assetProfile.dataGatheringFrequency ?? 'DAILY',
userId: dataSource === 'MANUAL' ? user.id : undefined userId: dataSource === 'MANUAL' ? user.id : undefined
}, },
symbolProfileId: undefined, symbolProfileId: undefined,
@ -590,18 +592,19 @@ export class ImportService {
const value = new Big(quantity).mul(unitPrice).toNumber(); const value = new Big(quantity).mul(unitPrice).toNumber();
const valueInBaseCurrency = this.exchangeRateDataService.toCurrencyAtDate( const valueInBaseCurrency =
(await this.exchangeRateDataService.toCurrencyAtDate(
value, value,
currency ?? assetProfile.currency, currency ?? assetProfile.currency,
userCurrency, userCurrency,
date date
); )) ?? 0;
activities.push({ activities.push({
...order, ...order,
error, error,
value, value,
valueInBaseCurrency: await valueInBaseCurrency, valueInBaseCurrency,
// @ts-ignore // @ts-ignore
SymbolProfile: assetProfile SymbolProfile: assetProfile
}); });

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

@ -1,6 +1,7 @@
import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service';
import { SubscriptionService } from '@ghostfolio/api/app/subscription/subscription.service'; import { SubscriptionService } from '@ghostfolio/api/app/subscription/subscription.service';
import { UserService } from '@ghostfolio/api/app/user/user.service'; import { UserService } from '@ghostfolio/api/app/user/user.service';
import { encodeDataSource } from '@ghostfolio/api/helper/data-source.helper';
import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
@ -17,7 +18,6 @@ import {
PROPERTY_UPTIME, PROPERTY_UPTIME,
ghostfolioFearAndGreedIndexDataSourceStocks ghostfolioFearAndGreedIndexDataSourceStocks
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { encodeDataSource } from '@ghostfolio/common/helper';
import { InfoItem, Statistics } from '@ghostfolio/common/interfaces'; import { InfoItem, Statistics } from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions'; import { permissions } from '@ghostfolio/common/permissions';

4
apps/api/src/app/portfolio/current-rate.service.ts

@ -51,13 +51,13 @@ export class CurrentRateService {
const values: GetValueObject[] = []; const values: GetValueObject[] = [];
if (includesToday) { if (includesToday) {
const quotesBySymbol = await this.dataProviderService.getQuotes({ const quotes = await this.dataProviderService.getQuotes({
items: dataGatheringItems, items: dataGatheringItems,
user: this.request?.user user: this.request?.user
}); });
for (const { dataSource, symbol } of dataGatheringItems) { for (const { dataSource, symbol } of dataGatheringItems) {
const quote = quotesBySymbol[symbol]; const quote = quotes[getAssetProfileIdentifier({ dataSource, symbol })];
if (quote?.dataProviderInfo) { if (quote?.dataProviderInfo) {
dataProviderInfos.push(quote.dataProviderInfo); dataProviderInfos.push(quote.dataProviderInfo);

3
apps/api/src/app/portfolio/portfolio.service.spec.ts

@ -11,6 +11,7 @@ import { ImpersonationService } from '@ghostfolio/api/services/impersonation/imp
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { UNKNOWN_KEY } from '@ghostfolio/common/config';
import { parseDate } from '@ghostfolio/common/helper'; import { parseDate } from '@ghostfolio/common/helper';
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { Account, DataSource } from '@prisma/client'; import { Account, DataSource } from '@prisma/client';
import { Big } from 'big.js'; import { Big } from 'big.js';
@ -198,7 +199,7 @@ describe('PortfolioService', () => {
portfolioService as unknown as { portfolioService as unknown as {
getCashSymbolProfiles: ( getCashSymbolProfiles: (
aCashDetails: CashDetails aCashDetails: CashDetails
) => { dataSource: DataSource; symbol: string }[]; ) => AssetProfileIdentifier[];
} }
).getCashSymbolProfiles(cashDetails); ).getCashSymbolProfiles(cashDetails);

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

@ -46,6 +46,7 @@ import {
import { import {
AccountsResponse, AccountsResponse,
Activity, Activity,
AssetProfileIdentifier,
EnhancedSymbolProfile, EnhancedSymbolProfile,
Filter, Filter,
HistoricalDataItem, HistoricalDataItem,
@ -204,21 +205,21 @@ export class PortfolioService {
switch (type) { switch (type) {
case ActivityType.DIVIDEND: case ActivityType.DIVIDEND:
dividendInBaseCurrency += dividendInBaseCurrency +=
await this.exchangeRateDataService.toCurrencyAtDate( (await this.exchangeRateDataService.toCurrencyAtDate(
new Big(quantity).mul(unitPrice).toNumber(), new Big(quantity).mul(unitPrice).toNumber(),
currency ?? SymbolProfile.currency, currency ?? SymbolProfile.currency,
userCurrency, userCurrency,
date date
); )) ?? 0;
break; break;
case ActivityType.INTEREST: case ActivityType.INTEREST:
interestInBaseCurrency += interestInBaseCurrency +=
await this.exchangeRateDataService.toCurrencyAtDate( (await this.exchangeRateDataService.toCurrencyAtDate(
unitPrice, unitPrice,
currency ?? SymbolProfile.currency, currency ?? SymbolProfile.currency,
userCurrency, userCurrency,
date date
); )) ?? 0;
break; break;
} }
@ -776,11 +777,9 @@ export class PortfolioService {
symbol, symbol,
userId userId
}: { }: {
dataSource: DataSource;
impersonationId: string; impersonationId: string;
symbol: string;
userId: string; userId: string;
}): Promise<PortfolioHoldingResponse> { } & AssetProfileIdentifier): Promise<PortfolioHoldingResponse> {
userId = await this.getUserId(impersonationId, userId); userId = await this.getUserId(impersonationId, userId);
const user = await this.userService.user({ id: userId }); const user = await this.userService.user({ id: userId });
const userCurrency = this.getUserCurrency(user); const userCurrency = this.getUserCurrency(user);
@ -890,10 +889,13 @@ export class PortfolioService {
marketPrice marketPrice
); );
if (historicalData[symbol]) { const historicalDataItems =
historicalData[getAssetProfileIdentifier({ dataSource, symbol })];
if (historicalDataItems) {
let j = -1; let j = -1;
for (const [date, { marketPrice }] of Object.entries( for (const [date, { marketPrice }] of Object.entries(
historicalData[symbol] historicalDataItems
)) { )) {
while ( while (
j + 1 < transactionPoints.length && j + 1 < transactionPoints.length &&
@ -955,7 +957,6 @@ export class PortfolioService {
marketPrice, marketPrice,
marketPriceMax, marketPriceMax,
marketPriceMin, marketPriceMin,
SymbolProfile,
tags, tags,
assetProfile: { assetProfile: {
assetClass: SymbolProfile.assetClass, assetClass: SymbolProfile.assetClass,
@ -1381,12 +1382,10 @@ export class PortfolioService {
tags, tags,
userId userId
}: { }: {
dataSource: DataSource;
impersonationId: string; impersonationId: string;
symbol: string;
tags: Tag[]; tags: Tag[];
userId: string; userId: string;
}) { } & AssetProfileIdentifier) {
userId = await this.getUserId(impersonationId, userId); userId = await this.getUserId(impersonationId, userId);
await this.activitiesService.assignTags({ await this.activitiesService.assignTags({

37
apps/api/src/app/symbol/symbol.service.ts

@ -1,7 +1,10 @@
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { DATE_FORMAT } from '@ghostfolio/common/helper'; import {
DATE_FORMAT,
getAssetProfileIdentifier
} from '@ghostfolio/common/helper';
import { import {
DataProviderHistoricalResponse, DataProviderHistoricalResponse,
HistoricalDataItem, HistoricalDataItem,
@ -24,15 +27,31 @@ export class SymbolService {
public async get({ public async get({
dataGatheringItem, dataGatheringItem,
includeHistoricalData includeHistoricalData,
useIntradayData = false
}: { }: {
dataGatheringItem: DataGatheringItem; dataGatheringItem: DataGatheringItem;
includeHistoricalData?: number; includeHistoricalData?: number;
useIntradayData?: boolean;
}): Promise<SymbolItem> { }): Promise<SymbolItem> {
let currency: string;
let marketPrice: number;
if (useIntradayData) {
const latestMarketData = await this.marketDataService.getLatest({
dataSource: dataGatheringItem.dataSource,
symbol: dataGatheringItem.symbol
});
marketPrice = latestMarketData?.marketPrice;
} else {
const quotes = await this.dataProviderService.getQuotes({ const quotes = await this.dataProviderService.getQuotes({
items: [dataGatheringItem] items: [dataGatheringItem]
}); });
const { currency, marketPrice } = quotes[dataGatheringItem.symbol] ?? {};
({ currency, marketPrice } =
quotes[getAssetProfileIdentifier(dataGatheringItem)] ?? {});
}
if (dataGatheringItem.dataSource && marketPrice >= 0) { if (dataGatheringItem.dataSource && marketPrice >= 0) {
let historicalData: HistoricalDataItem[] = []; let historicalData: HistoricalDataItem[] = [];
@ -75,12 +94,17 @@ export class SymbolService {
date = new Date(), date = new Date(),
symbol symbol
}: DataGatheringItem): Promise<DataProviderHistoricalResponse> { }: DataGatheringItem): Promise<DataProviderHistoricalResponse> {
const assetProfileIdentifier = getAssetProfileIdentifier({
dataSource,
symbol
});
let historicalData: { let historicalData: {
[symbol: string]: { [assetProfileIdentifier: string]: {
[date: string]: DataProviderHistoricalResponse; [date: string]: DataProviderHistoricalResponse;
}; };
} = { } = {
[symbol]: {} [assetProfileIdentifier]: {}
}; };
try { try {
@ -93,7 +117,8 @@ export class SymbolService {
return { return {
marketPrice: marketPrice:
historicalData?.[symbol]?.[format(date, DATE_FORMAT)]?.marketPrice historicalData?.[assetProfileIdentifier]?.[format(date, DATE_FORMAT)]
?.marketPrice
}; };
} }

8
apps/api/src/events/asset-profile-changed.listener.ts

@ -5,10 +5,10 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DEFAULT_CURRENCY } from '@ghostfolio/common/config';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter'; import { OnEvent } from '@nestjs/event-emitter';
import { DataSource } from '@prisma/client';
import ms from 'ms'; import ms from 'ms';
import { AssetProfileChangedEvent } from './asset-profile-changed.event'; import { AssetProfileChangedEvent } from './asset-profile-changed.event';
@ -64,11 +64,7 @@ export class AssetProfileChangedListener {
currency, currency,
dataSource, dataSource,
symbol symbol
}: { }: { currency: string } & AssetProfileIdentifier) {
currency: string;
dataSource: DataSource;
symbol: string;
}) {
this.logger.log(`Asset profile of ${symbol} (${dataSource}) has changed`); this.logger.log(`Asset profile of ${symbol} (${dataSource}) has changed`);
if ( if (

6
apps/api/src/helper/country.helper.ts

@ -7,8 +7,12 @@ export function getCountryCodeByName({
aliases?: Record<string, string>; aliases?: Record<string, string>;
name: string; name: string;
}): string { }): string {
if (aliases[name]) {
return aliases[name];
}
for (const [code, country] of Object.entries(countries)) { for (const [code, country] of Object.entries(countries)) {
if (country.name === name || country.name === aliases[name]) { if (country.name === name) {
return code; return code;
} }
} }

67
apps/api/src/helper/data-source.helper.ts

@ -0,0 +1,67 @@
import { DataSource } from '@prisma/client';
import { createHash } from 'node:crypto';
const encodedDataSourceByDataSource = new Map<DataSource, string>(
Object.values(DataSource).map((dataSource) => {
return [dataSource, hashDataSource(dataSource)];
})
);
const dataSourceByEncodedDataSource = new Map<string, DataSource>(
[...encodedDataSourceByDataSource].map(([dataSource, encodedDataSource]) => {
return [encodedDataSource, dataSource];
})
);
/**
* @deprecated Backward compatibility to support importing data that was
* exported using the previous data source encoding
*/
const dataSourceByDeprecatedEncodedDataSource = new Map<string, DataSource>(
Object.values(DataSource).map((dataSource) => {
return [deprecatedHashDataSource(dataSource), dataSource];
})
);
/**
* @deprecated Backward compatibility (see above)
*/
function deprecatedHashDataSource(dataSource: DataSource) {
return Buffer.from(dataSource, 'utf-8').toString('hex');
}
function hashDataSource(dataSource: DataSource) {
return createHash('sha256').update(dataSource).digest('hex').slice(0, 8);
}
export function decodeDataSource(encodedDataSource: string) {
if (!encodedDataSource) {
return undefined;
}
return (
dataSourceByEncodedDataSource.get(encodedDataSource) ??
dataSourceByDeprecatedEncodedDataSource.get(encodedDataSource) ??
encodedDataSource
);
}
export function encodeDataSource(dataSource: DataSource) {
if (!dataSource) {
return undefined;
}
return encodedDataSourceByDataSource.get(dataSource);
}
export function getMaskedGhostfolioDataSource({
dataSource,
ghostfolioDataSources
}: {
dataSource: DataSource;
ghostfolioDataSources: string[];
}) {
return ghostfolioDataSources.includes(dataSource)
? DataSource.GHOSTFOLIO
: dataSource;
}

2
apps/api/src/interceptors/performance-logging/performance-logging.service.ts

@ -2,7 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
@Injectable() @Injectable()
export class PerformanceLoggingService { export class PerformanceLoggingService {
private readonly logger = new Logger(PerformanceLoggingService.name); private readonly logger = new Logger();
public logPerformance({ public logPerformance({
className, className,

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

@ -1,5 +1,5 @@
import { decodeDataSource } from '@ghostfolio/api/helper/data-source.helper';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { decodeDataSource } from '@ghostfolio/common/helper';
import { import {
CallHandler, CallHandler,

26
apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts

@ -1,6 +1,10 @@
import {
encodeDataSource,
getMaskedGhostfolioDataSource
} from '@ghostfolio/api/helper/data-source.helper';
import { redactPaths } from '@ghostfolio/api/helper/object.helper'; import { redactPaths } from '@ghostfolio/api/helper/object.helper';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { encodeDataSource } from '@ghostfolio/common/helper'; import { hasRole } from '@ghostfolio/common/permissions';
import { import {
CallHandler, CallHandler,
@ -44,20 +48,32 @@ export class TransformDataSourceInResponseInterceptor<
next: CallHandler<T> next: CallHandler<T>
): Observable<any> { ): Observable<any> {
const isExportMode = context.getClass().name === 'ExportController'; const isExportMode = context.getClass().name === 'ExportController';
const { user } = context.switchToHttp().getRequest();
return next.handle().pipe( return next.handle().pipe(
map((data: any) => { map((data: any) => {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
const valueMap = this.encodedDataSourceMap; const valueMap = hasRole(user, 'ADMIN')
? {}
: { ...this.encodedDataSourceMap };
if (isExportMode) { if (isExportMode) {
for (const dataSource of this.configurationService.get( const ghostfolioDataSources = this.configurationService.get(
'DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER' 'DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER'
)) { ) as DataSource[];
valueMap[dataSource] = 'GHOSTFOLIO';
for (const dataSource of ghostfolioDataSources) {
valueMap[dataSource] = getMaskedGhostfolioDataSource({
dataSource,
ghostfolioDataSources
});
} }
} }
if (Object.keys(valueMap).length === 0) {
return data;
}
data = redactPaths({ data = redactPaths({
valueMap, valueMap,
object: data, object: data,

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

@ -8,7 +8,10 @@ import {
CACHE_TTL_INFINITE, CACHE_TTL_INFINITE,
PROPERTY_BENCHMARKS PROPERTY_BENCHMARKS
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { calculateBenchmarkTrend } from '@ghostfolio/common/helper'; import {
calculateBenchmarkTrend,
getAssetProfileIdentifier
} from '@ghostfolio/common/helper';
import { import {
AssetProfileIdentifier, AssetProfileIdentifier,
Benchmark, Benchmark,
@ -266,8 +269,9 @@ export class BenchmarkService {
let storeInCache = true; let storeInCache = true;
const benchmarks = allTimeHighs.map((allTimeHigh, index) => { const benchmarks = allTimeHighs.map((allTimeHigh, index) => {
const { dataSource, symbol } = benchmarkAssetProfiles[index];
const { marketPrice } = const { marketPrice } =
quotes[benchmarkAssetProfiles[index].symbol] ?? {}; quotes[getAssetProfileIdentifier({ dataSource, symbol })] ?? {};
let performancePercentFromAllTimeHigh = 0; let performancePercentFromAllTimeHigh = 0;

5
apps/api/src/services/configuration/configuration.service.ts

@ -6,6 +6,7 @@ import {
DEFAULT_PORT, DEFAULT_PORT,
DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY, DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY,
DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY, DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY,
DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY,
DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY, DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY,
DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
@ -43,6 +44,7 @@ export class ConfigurationService {
ENABLE_FEATURE_AUTH_GOOGLE: bool({ default: false }), ENABLE_FEATURE_AUTH_GOOGLE: bool({ default: false }),
ENABLE_FEATURE_AUTH_OIDC: bool({ default: false }), ENABLE_FEATURE_AUTH_OIDC: bool({ default: false }),
ENABLE_FEATURE_AUTH_TOKEN: bool({ default: true }), ENABLE_FEATURE_AUTH_TOKEN: bool({ default: true }),
ENABLE_FEATURE_CRON: bool({ default: true }),
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }), ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }),
ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES: bool({ default: true }), ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES: bool({ default: true }),
ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }), ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }),
@ -88,6 +90,9 @@ export class ConfigurationService {
PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY: num({ PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY: num({
default: DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY default: DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY
}), }),
PROCESSOR_GATHER_STATISTICS_CONCURRENCY: num({
default: DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY
}),
PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY: num({ PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY: num({
default: DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY default: DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY
}), }),

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

@ -1,12 +1,17 @@
import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { UserModule } from '@ghostfolio/api/app/user/user.module';
import { UserService } from '@ghostfolio/api/app/user/user.service';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module'; import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module';
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { StatisticsGatheringQueueModule } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.module'; import { StatisticsGatheringQueueModule } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.module';
import { StatisticsGatheringService } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.service';
import { TwitterBotModule } from '@ghostfolio/api/services/twitter-bot/twitter-bot.module'; import { TwitterBotModule } from '@ghostfolio/api/services/twitter-bot/twitter-bot.module';
import { TwitterBotService } from '@ghostfolio/api/services/twitter-bot/twitter-bot.service';
import { Module } from '@nestjs/common'; import { Logger, Module } from '@nestjs/common';
import { CronService } from './cron.service'; import { CronService } from './cron.service';
@ -14,12 +19,46 @@ import { CronService } from './cron.service';
imports: [ imports: [
ConfigurationModule, ConfigurationModule,
DataGatheringQueueModule, DataGatheringQueueModule,
ExchangeRateDataModule,
PropertyModule, PropertyModule,
StatisticsGatheringQueueModule, StatisticsGatheringQueueModule,
TwitterBotModule, TwitterBotModule,
UserModule UserModule
], ],
providers: [CronService] providers: [
{
inject: [
ConfigurationService,
DataGatheringService,
PropertyService,
StatisticsGatheringService,
TwitterBotService,
UserService
],
provide: CronService,
useFactory: (
configurationService: ConfigurationService,
dataGatheringService: DataGatheringService,
propertyService: PropertyService,
statisticsGatheringService: StatisticsGatheringService,
twitterBotService: TwitterBotService,
userService: UserService
) => {
if (!configurationService.get('ENABLE_FEATURE_CRON')) {
Logger.log('Scheduled cron jobs are disabled', 'CronService');
return null;
}
return new CronService(
configurationService,
dataGatheringService,
propertyService,
statisticsGatheringService,
twitterBotService,
userService
);
}
}
]
}) })
export class CronModule {} export class CronModule {}

10
apps/api/src/services/cron/cron.service.ts

@ -1,6 +1,5 @@
import { UserService } from '@ghostfolio/api/app/user/user.service'; import { UserService } from '@ghostfolio/api/app/user/user.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.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 { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { StatisticsGatheringService } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.service'; import { StatisticsGatheringService } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.service';
@ -24,7 +23,6 @@ export class CronService {
public constructor( public constructor(
private readonly configurationService: ConfigurationService, private readonly configurationService: ConfigurationService,
private readonly dataGatheringService: DataGatheringService, private readonly dataGatheringService: DataGatheringService,
private readonly exchangeRateDataService: ExchangeRateDataService,
private readonly propertyService: PropertyService, private readonly propertyService: PropertyService,
private readonly statisticsGatheringService: StatisticsGatheringService, private readonly statisticsGatheringService: StatisticsGatheringService,
private readonly twitterBotService: TwitterBotService, private readonly twitterBotService: TwitterBotService,
@ -41,15 +39,11 @@ export class CronService {
@Cron(CronService.EVERY_HOUR_AT_RANDOM_MINUTE) @Cron(CronService.EVERY_HOUR_AT_RANDOM_MINUTE)
public async runEveryHourAtRandomMinute() { public async runEveryHourAtRandomMinute() {
if (await this.isDataGatheringEnabled()) { if (await this.isDataGatheringEnabled()) {
await this.dataGatheringService.gather7Days(); await this.dataGatheringService.gatherHourlyMarketData();
await this.dataGatheringService.gatherRecentMarketData();
} }
} }
@Cron(CronExpression.EVERY_12_HOURS)
public async runEveryTwelveHours() {
await this.exchangeRateDataService.loadCurrencies();
}
@Cron(CronExpression.EVERY_DAY_AT_5PM) @Cron(CronExpression.EVERY_DAY_AT_5PM)
public async runEveryDayAtFivePm() { public async runEveryDayAtFivePm() {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {

7
apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts

@ -15,8 +15,11 @@ import { SymbolProfile } from '@prisma/client';
export class TrackinsightDataEnhancerService implements DataEnhancerInterface { export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
private static baseUrl = 'https://www.trackinsight.com/data-api'; private static baseUrl = 'https://www.trackinsight.com/data-api';
private static countriesMapping = { private static countriesMapping = {
'Russian Federation': 'Russia', 'Republic of Korea': 'KR',
USA: 'United States' 'Russian Federation': 'RU',
Turkey: 'TR',
USA: 'US',
'Virgin Islands, British': 'VG'
}; };
private static holdingsWeightTreshold = 0.85; private static holdingsWeightTreshold = 0.85;
private static sectorsMapping: Record<string, SectorName> = { private static sectorsMapping: Record<string, SectorName> = {

158
apps/api/src/services/data-provider/data-provider.service.ts

@ -1,5 +1,6 @@
import { ImportDataDto } from '@ghostfolio/api/app/import/import-data.dto'; import { ImportDataDto } from '@ghostfolio/api/app/import/import-data.dto';
import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service';
import { getMaskedGhostfolioDataSource } from '@ghostfolio/api/helper/data-source.helper';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
@ -77,19 +78,20 @@ export class DataProviderService implements OnModuleInit {
useCache: false useCache: false
}); });
if (quotes[symbol]?.marketPrice > 0) { if (
quotes[getAssetProfileIdentifier({ dataSource, symbol })]?.marketPrice > 0
) {
return true; return true;
} }
return false; return false;
} }
// TODO: Change symbol in response to assetProfileIdentifier
public async getAssetProfiles(items: AssetProfileIdentifier[]): Promise<{ public async getAssetProfiles(items: AssetProfileIdentifier[]): Promise<{
[symbol: string]: Partial<SymbolProfile>; [assetProfileIdentifier: string]: Partial<SymbolProfile>;
}> { }> {
const response: { const response: {
[symbol: string]: Partial<SymbolProfile>; [assetProfileIdentifier: string]: Partial<SymbolProfile>;
} = {}; } = {};
const itemsGroupedByDataSource = groupBy(items, ({ dataSource }) => { const itemsGroupedByDataSource = groupBy(items, ({ dataSource }) => {
@ -115,7 +117,12 @@ export class DataProviderService implements OnModuleInit {
promises.push( promises.push(
promise.then((assetProfile) => { promise.then((assetProfile) => {
if (isCurrency(assetProfile?.currency)) { if (isCurrency(assetProfile?.currency)) {
response[symbol] = assetProfile; response[
getAssetProfileIdentifier({
symbol,
dataSource: DataSource[dataSource]
})
] = { ...assetProfile, symbol };
} }
}) })
); );
@ -215,6 +222,9 @@ export class DataProviderService implements OnModuleInit {
} = {}; } = {};
const dataSources = await this.getDataSources(); const dataSources = await this.getDataSources();
const ghostfolioDataSources = this.configurationService.get(
'DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER'
);
for (const [ for (const [
index, index,
@ -222,6 +232,10 @@ export class DataProviderService implements OnModuleInit {
] of activitiesDto.entries()) { ] of activitiesDto.entries()) {
const activityPath = const activityPath =
maxActivitiesToImport === 1 ? 'activity' : `activities.${index}`; maxActivitiesToImport === 1 ? 'activity' : `activities.${index}`;
const maskedDataSource = getMaskedGhostfolioDataSource({
dataSource,
ghostfolioDataSources
});
if (!dataSources.includes(dataSource)) { if (!dataSources.includes(dataSource)) {
throw new Error( throw new Error(
@ -237,7 +251,7 @@ export class DataProviderService implements OnModuleInit {
if (dataProvider.getDataProviderInfo().isPremium) { if (dataProvider.getDataProviderInfo().isPremium) {
throw new Error( throw new Error(
`${activityPath}.dataSource ("${dataSource}") is not valid` `${activityPath}.dataSource ("${maskedDataSource}") requires Ghostfolio Premium`
); );
} }
} }
@ -281,7 +295,7 @@ export class DataProviderService implements OnModuleInit {
symbol symbol
} }
]) ])
)?.[symbol]; )?.[assetProfileIdentifier];
} catch {} } catch {}
if (!assetProfile?.name) { if (!assetProfile?.name) {
@ -300,7 +314,7 @@ export class DataProviderService implements OnModuleInit {
if (!assetProfile?.name) { if (!assetProfile?.name) {
throw new Error( throw new Error(
`activities.${index}.symbol ("${symbol}") is not valid for the specified data source ("${dataSource}")` `activities.${index}.symbol ("${symbol}") is not valid for the specified data source ("${maskedDataSource}")`
); );
} }
@ -318,12 +332,10 @@ export class DataProviderService implements OnModuleInit {
symbol, symbol,
to to
}: { }: {
dataSource: DataSource;
from: Date; from: Date;
granularity: Granularity; granularity: Granularity;
symbol: string;
to: Date; to: Date;
}) { } & AssetProfileIdentifier) {
return this.getDataProvider(DataSource[dataSource]).getDividends({ return this.getDataProvider(DataSource[dataSource]).getDividends({
from, from,
granularity, granularity,
@ -333,17 +345,20 @@ export class DataProviderService implements OnModuleInit {
}); });
} }
// TODO: Change symbol in response to assetProfileIdentifier
public async getHistorical( public async getHistorical(
aItems: AssetProfileIdentifier[], aItems: AssetProfileIdentifier[],
aGranularity: Granularity = 'month', aGranularity: Granularity = 'month',
from: Date, from: Date,
to: Date to: Date
): Promise<{ ): Promise<{
[symbol: string]: { [date: string]: DataProviderHistoricalResponse }; [assetProfileIdentifier: string]: {
[date: string]: DataProviderHistoricalResponse;
};
}> { }> {
let response: { let response: {
[symbol: string]: { [date: string]: DataProviderHistoricalResponse }; [assetProfileIdentifier: string]: {
[date: string]: DataProviderHistoricalResponse;
};
} = {}; } = {};
if (isEmpty(aItems) || !isValid(from) || !isValid(to)) { if (isEmpty(aItems) || !isValid(from) || !isValid(to)) {
@ -383,13 +398,20 @@ export class DataProviderService implements OnModuleInit {
ORDER BY date;`; ORDER BY date;`;
response = marketDataByGranularity.reduce((r, marketData) => { response = marketDataByGranularity.reduce((r, marketData) => {
const { date, marketPrice, symbol } = marketData; const { dataSource, date, marketPrice, symbol } = marketData;
if (!r[symbol]) { const assetProfileIdentifier = getAssetProfileIdentifier({
r[symbol] = {}; dataSource,
symbol
});
if (!r[assetProfileIdentifier]) {
r[assetProfileIdentifier] = {};
} }
r[symbol][format(new Date(date), DATE_FORMAT)] = { marketPrice }; r[assetProfileIdentifier][format(new Date(date), DATE_FORMAT)] = {
marketPrice
};
return r; return r;
}, {}); }, {});
@ -400,7 +422,6 @@ export class DataProviderService implements OnModuleInit {
} }
} }
// TODO: Change symbol in response to assetProfileIdentifier
public async getHistoricalRaw({ public async getHistoricalRaw({
assetProfileIdentifiers, assetProfileIdentifiers,
from, from,
@ -410,7 +431,9 @@ export class DataProviderService implements OnModuleInit {
from: Date; from: Date;
to: Date; to: Date;
}): Promise<{ }): Promise<{
[symbol: string]: { [date: string]: DataProviderHistoricalResponse }; [assetProfileIdentifier: string]: {
[date: string]: DataProviderHistoricalResponse;
};
}> { }> {
for (const { currency, rootCurrency } of DERIVED_CURRENCIES) { for (const { currency, rootCurrency } of DERIVED_CURRENCIES) {
if ( if (
@ -443,11 +466,14 @@ export class DataProviderService implements OnModuleInit {
); );
const result: { const result: {
[symbol: string]: { [date: string]: DataProviderHistoricalResponse }; [assetProfileIdentifier: string]: {
[date: string]: DataProviderHistoricalResponse;
};
} = {}; } = {};
const promises: Promise<{ const promises: Promise<{
data: { [date: string]: DataProviderHistoricalResponse }; data: { [date: string]: DataProviderHistoricalResponse };
dataSource: DataSource;
symbol: string; symbol: string;
}>[] = []; }>[] = [];
for (const { dataSource, symbol } of assetProfileIdentifiers) { for (const { dataSource, symbol } of assetProfileIdentifiers) {
@ -465,6 +491,7 @@ export class DataProviderService implements OnModuleInit {
promises.push( promises.push(
Promise.resolve({ Promise.resolve({
data, data,
dataSource,
symbol symbol
}) })
); );
@ -478,7 +505,7 @@ export class DataProviderService implements OnModuleInit {
requestTimeout: ms('30 seconds') requestTimeout: ms('30 seconds')
}) })
.then((data) => { .then((data) => {
return { symbol, data: data?.[symbol] }; return { dataSource, symbol, data: data?.[symbol] };
}) })
); );
} }
@ -488,22 +515,26 @@ export class DataProviderService implements OnModuleInit {
try { try {
const allData = await Promise.all(promises); const allData = await Promise.all(promises);
for (const { data, symbol } of allData) { for (const { data, dataSource, symbol } of allData) {
const currency = DERIVED_CURRENCIES.find(({ rootCurrency }) => { const currency = DERIVED_CURRENCIES.find(({ rootCurrency }) => {
return `${DEFAULT_CURRENCY}${rootCurrency}` === symbol; return `${DEFAULT_CURRENCY}${rootCurrency}` === symbol;
}); });
if (currency) { if (currency) {
// Add derived currency // Add derived currency
result[`${DEFAULT_CURRENCY}${currency.currency}`] = result[
this.transformHistoricalData({ getAssetProfileIdentifier({
dataSource,
symbol: `${DEFAULT_CURRENCY}${currency.currency}`
})
] = this.transformHistoricalData({
allData, allData,
currency: `${DEFAULT_CURRENCY}${currency.rootCurrency}`, currency: `${DEFAULT_CURRENCY}${currency.rootCurrency}`,
factor: currency.factor factor: currency.factor
}); });
} }
result[symbol] = data; result[getAssetProfileIdentifier({ dataSource, symbol })] = data;
} }
} catch (error) { } catch (error) {
this.logger.error(error); this.logger.error(error);
@ -514,7 +545,6 @@ export class DataProviderService implements OnModuleInit {
return result; return result;
} }
// TODO: Change symbol in response to assetProfileIdentifier
public async getQuotes({ public async getQuotes({
items, items,
requestTimeout, requestTimeout,
@ -526,10 +556,12 @@ export class DataProviderService implements OnModuleInit {
useCache?: boolean; useCache?: boolean;
user?: UserWithSettings; user?: UserWithSettings;
}): Promise<{ }): Promise<{
[symbol: string]: DataProviderResponse; [assetProfileIdentifier: string]: DataProviderResponse;
}> { }> {
const response: { const response: {
[symbol: string]: DataProviderResponse; [assetProfileIdentifier: string]: DataProviderResponse & {
symbol: string;
};
} = {}; } = {};
const startTimeTotal = performance.now(); const startTimeTotal = performance.now();
@ -538,11 +570,17 @@ export class DataProviderService implements OnModuleInit {
return symbol === `${DEFAULT_CURRENCY}USX`; return symbol === `${DEFAULT_CURRENCY}USX`;
}) })
) { ) {
response[`${DEFAULT_CURRENCY}USX`] = { response[
getAssetProfileIdentifier({
dataSource: this.getDataSourceForExchangeRates(),
symbol: `${DEFAULT_CURRENCY}USX`
})
] = {
currency: 'USX', currency: 'USX',
dataSource: this.getDataSourceForExchangeRates(), dataSource: this.getDataSourceForExchangeRates(),
marketPrice: 100, marketPrice: 100,
marketState: 'open' marketState: 'open',
symbol: `${DEFAULT_CURRENCY}USX`
}; };
} }
@ -557,8 +595,13 @@ export class DataProviderService implements OnModuleInit {
if (quoteString) { if (quoteString) {
try { try {
const cachedDataProviderResponse = JSON.parse(quoteString); const cachedDataProviderResponse = JSON.parse(
response[symbol] = cachedDataProviderResponse; quoteString
) as DataProviderResponse;
response[getAssetProfileIdentifier({ dataSource, symbol })] = {
...cachedDataProviderResponse,
symbol
};
continue; continue;
} catch {} } catch {}
} }
@ -627,7 +670,11 @@ export class DataProviderService implements OnModuleInit {
); );
const promise = Promise.resolve( const promise = Promise.resolve(
dataProvider.getQuotes({ requestTimeout, symbols: symbolsChunk }) dataProvider.getQuotes({
requestTimeout,
useCache,
symbols: symbolsChunk
})
); );
promises.push( promises.push(
@ -646,14 +693,19 @@ export class DataProviderService implements OnModuleInit {
continue; continue;
} }
response[symbol] = dataProviderResponse; response[
getAssetProfileIdentifier({
symbol,
dataSource: DataSource[dataSource]
})
] = { ...dataProviderResponse, symbol };
this.redisCacheService.set( this.redisCacheService.set(
this.redisCacheService.getQuoteKey({ this.redisCacheService.getQuoteKey({
symbol, symbol,
dataSource: DataSource[dataSource] dataSource: DataSource[dataSource]
}), }),
JSON.stringify(response[symbol]), JSON.stringify(dataProviderResponse),
this.configurationService.get('CACHE_QUOTES_TTL') this.configurationService.get('CACHE_QUOTES_TTL')
); );
@ -663,7 +715,7 @@ export class DataProviderService implements OnModuleInit {
rootCurrency rootCurrency
} of DERIVED_CURRENCIES) { } of DERIVED_CURRENCIES) {
if (symbol === `${DEFAULT_CURRENCY}${rootCurrency}`) { if (symbol === `${DEFAULT_CURRENCY}${rootCurrency}`) {
response[`${DEFAULT_CURRENCY}${currency}`] = { const derivedDataProviderResponse: DataProviderResponse = {
...dataProviderResponse, ...dataProviderResponse,
currency, currency,
marketPrice: new Big( marketPrice: new Big(
@ -674,12 +726,22 @@ export class DataProviderService implements OnModuleInit {
marketState: 'open' marketState: 'open'
}; };
response[
getAssetProfileIdentifier({
dataSource: DataSource[dataSource],
symbol: `${DEFAULT_CURRENCY}${currency}`
})
] = {
...derivedDataProviderResponse,
symbol: `${DEFAULT_CURRENCY}${currency}`
};
this.redisCacheService.set( this.redisCacheService.set(
this.redisCacheService.getQuoteKey({ this.redisCacheService.getQuoteKey({
dataSource: DataSource[dataSource], dataSource: DataSource[dataSource],
symbol: `${DEFAULT_CURRENCY}${currency}` symbol: `${DEFAULT_CURRENCY}${currency}`
}), }),
JSON.stringify(response[`${DEFAULT_CURRENCY}${currency}`]), JSON.stringify(derivedDataProviderResponse),
this.configurationService.get('CACHE_QUOTES_TTL') this.configurationService.get('CACHE_QUOTES_TTL')
); );
} }
@ -697,21 +759,21 @@ export class DataProviderService implements OnModuleInit {
try { try {
await this.marketDataService.updateMany({ await this.marketDataService.updateMany({
data: Object.keys(response) data: Object.values(response)
.filter((symbol) => { .filter(({ marketPrice, marketState }) => {
return ( return (
isNumber(response[symbol].marketPrice) && isNumber(marketPrice) &&
response[symbol].marketPrice > 0 && marketPrice > 0 &&
response[symbol].marketState === 'open' marketState === 'open'
); );
}) })
.map((symbol) => { .map((dataProviderResponse) => {
return { return {
symbol, dataSource: dataProviderResponse.dataSource,
dataSource: response[symbol].dataSource,
date: getStartOfUtcDate(new Date()), date: getStartOfUtcDate(new Date()),
marketPrice: response[symbol].marketPrice, marketPrice: dataProviderResponse.marketPrice,
state: 'INTRADAY' state: 'INTRADAY',
symbol: dataProviderResponse.symbol
}; };
}) })
}); });

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

@ -54,9 +54,9 @@ export class FinancialModelingPrepService
implements DataProviderInterface, OnModuleInit implements DataProviderInterface, OnModuleInit
{ {
private static countriesMapping = { private static countriesMapping = {
'Korea (the Republic of)': 'South Korea', 'Korea (the Republic of)': 'KR',
'Russian Federation': 'Russia', 'Russian Federation': 'RU',
'Taiwan (Province of China)': 'Taiwan' 'Taiwan (Province of China)': 'TW'
}; };
private readonly logger = new Logger(FinancialModelingPrepService.name); private readonly logger = new Logger(FinancialModelingPrepService.name);

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

@ -75,6 +75,7 @@ export interface GetHistoricalParams {
export interface GetQuotesParams { export interface GetQuotesParams {
requestTimeout?: number; requestTimeout?: number;
symbols: string[]; symbols: string[];
useCache?: boolean;
} }
export interface GetSearchParams { export interface GetSearchParams {

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

@ -136,7 +136,8 @@ export class ManualService implements DataProviderInterface {
} }
public async getQuotes({ public async getQuotes({
symbols symbols,
useCache = true
}: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> {
const response: { [symbol: string]: DataProviderResponse } = {}; const response: { [symbol: string]: DataProviderResponse } = {};
@ -164,17 +165,17 @@ export class ManualService implements DataProviderInterface {
} }
}); });
const symbolProfilesWithScraperConfigurationAndInstantMode = const symbolProfilesToScrape = symbolProfiles.filter(
symbolProfiles.filter(({ scraperConfiguration }) => { ({ scraperConfiguration }) => {
return ( return (
scraperConfiguration?.mode === 'instant' && (scraperConfiguration?.mode === 'instant' || !useCache) &&
scraperConfiguration?.selector && scraperConfiguration?.selector &&
scraperConfiguration?.url scraperConfiguration?.url
); );
}); }
);
const scraperResultPromises = const scraperResultPromises = symbolProfilesToScrape.map(
symbolProfilesWithScraperConfigurationAndInstantMode.map(
async ({ scraperConfiguration, symbol }) => { async ({ scraperConfiguration, symbol }) => {
try { try {
const marketPrice = await this.scrape({ const marketPrice = await this.scrape({

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

@ -8,10 +8,7 @@ import {
GetSearchParams GetSearchParams
} from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
import { FetchService } from '@ghostfolio/api/services/fetch/fetch.service'; import { FetchService } from '@ghostfolio/api/services/fetch/fetch.service';
import { import { ghostfolioFearAndGreedIndexSymbolStocks } from '@ghostfolio/common/config';
ghostfolioFearAndGreedIndexSymbol,
ghostfolioFearAndGreedIndexSymbolStocks
} from '@ghostfolio/common/config';
import { DATE_FORMAT, getYesterday } from '@ghostfolio/common/helper'; import { DATE_FORMAT, getYesterday } from '@ghostfolio/common/helper';
import { import {
DataProviderHistoricalResponse, DataProviderHistoricalResponse,
@ -64,12 +61,7 @@ export class RapidApiService implements DataProviderInterface {
[symbol: string]: { [date: string]: DataProviderHistoricalResponse }; [symbol: string]: { [date: string]: DataProviderHistoricalResponse };
}> { }> {
try { try {
if ( if (symbol === ghostfolioFearAndGreedIndexSymbolStocks) {
[
ghostfolioFearAndGreedIndexSymbol,
ghostfolioFearAndGreedIndexSymbolStocks
].includes(symbol)
) {
const fgi = await this.getFearAndGreedIndex(); const fgi = await this.getFearAndGreedIndex();
return { return {
@ -106,12 +98,7 @@ export class RapidApiService implements DataProviderInterface {
try { try {
const symbol = symbols[0]; const symbol = symbols[0];
if ( if (symbol === ghostfolioFearAndGreedIndexSymbolStocks) {
[
ghostfolioFearAndGreedIndexSymbol,
ghostfolioFearAndGreedIndexSymbolStocks
].includes(symbol)
) {
const fgi = await this.getFearAndGreedIndex(); const fgi = await this.getFearAndGreedIndex();
return { return {

25
apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts

@ -11,9 +11,11 @@ import {
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { import {
DATE_FORMAT, DATE_FORMAT,
getAssetProfileIdentifier,
getYesterday, getYesterday,
resetHours resetHours
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
import { DataProviderHistoricalResponse } from '@ghostfolio/common/interfaces';
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { import {
@ -162,7 +164,7 @@ export class ExchangeRateDataService {
} }
public async loadCurrencies() { public async loadCurrencies() {
const result = await this.dataProviderService.getHistorical( const historicalData = await this.dataProviderService.getHistorical(
this.currencyPairs, this.currencyPairs,
'day', 'day',
getYesterday(), getYesterday(),
@ -176,11 +178,26 @@ export class ExchangeRateDataService {
requestTimeout: ms('30 seconds') requestTimeout: ms('30 seconds')
}); });
for (const symbol of Object.keys(quotes)) { const result: {
if (isNumber(quotes[symbol].marketPrice)) { [symbol: string]: { [date: string]: DataProviderHistoricalResponse };
} = {};
for (const { dataSource, symbol } of this.currencyPairs) {
const assetProfileIdentifier = getAssetProfileIdentifier({
dataSource,
symbol
});
if (historicalData[assetProfileIdentifier]) {
result[symbol] = historicalData[assetProfileIdentifier];
}
const quote = quotes[assetProfileIdentifier];
if (isNumber(quote?.marketPrice)) {
result[symbol] = { result[symbol] = {
[format(getYesterday(), DATE_FORMAT)]: { [format(getYesterday(), DATE_FORMAT)]: {
marketPrice: quotes[symbol].marketPrice marketPrice: quote.marketPrice
} }
}; };
} }

2
apps/api/src/services/interfaces/environment.interface.ts

@ -19,6 +19,7 @@ export interface Environment extends CleanedEnvAccessors {
ENABLE_FEATURE_AUTH_GOOGLE: boolean; ENABLE_FEATURE_AUTH_GOOGLE: boolean;
ENABLE_FEATURE_AUTH_OIDC: boolean; ENABLE_FEATURE_AUTH_OIDC: boolean;
ENABLE_FEATURE_AUTH_TOKEN: boolean; ENABLE_FEATURE_AUTH_TOKEN: boolean;
ENABLE_FEATURE_CRON: boolean;
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean; ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean;
ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES: boolean; ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES: boolean;
ENABLE_FEATURE_READ_ONLY_MODE: boolean; ENABLE_FEATURE_READ_ONLY_MODE: boolean;
@ -44,6 +45,7 @@ export interface Environment extends CleanedEnvAccessors {
PORT: number; PORT: number;
PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY: number; PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY: number;
PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY: number; PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY: number;
PROCESSOR_GATHER_STATISTICS_CONCURRENCY: number;
PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY: number; PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY: number;
PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT: number; PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT: number;
REDIS_DB: number; REDIS_DB: number;

21
apps/api/src/services/market-data/market-data.service.ts

@ -1,6 +1,7 @@
import { DateQuery } from '@ghostfolio/api/app/portfolio/interfaces/date-query.interface'; import { DateQuery } from '@ghostfolio/api/app/portfolio/interfaces/date-query.interface';
import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_TIMEOUT } from '@ghostfolio/common/config';
import { UpdateMarketDataDto } from '@ghostfolio/common/dtos'; import { UpdateMarketDataDto } from '@ghostfolio/common/dtos';
import { resetHours } from '@ghostfolio/common/helper'; import { resetHours } from '@ghostfolio/common/helper';
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
@ -40,6 +41,19 @@ export class MarketDataService {
}); });
} }
public async getLatest({
dataSource,
symbol
}: AssetProfileIdentifier): Promise<MarketData> {
return this.prismaService.marketData.findFirst({
orderBy: [{ date: 'desc' }],
where: {
dataSource,
symbol
}
});
}
public async getMax({ dataSource, symbol }: AssetProfileIdentifier) { public async getMax({ dataSource, symbol }: AssetProfileIdentifier) {
return this.prismaService.marketData.findFirst({ return this.prismaService.marketData.findFirst({
select: { select: {
@ -142,7 +156,8 @@ export class MarketDataService {
dataSource, dataSource,
symbol symbol
}: AssetProfileIdentifier & { data: Prisma.MarketDataUpdateInput[] }) { }: AssetProfileIdentifier & { data: Prisma.MarketDataUpdateInput[] }) {
await this.prismaService.$transaction(async (prisma) => { await this.prismaService.$transaction(
async (prisma) => {
if (data.length > 0) { if (data.length > 0) {
let minTime = Infinity; let minTime = Infinity;
let maxTime = -Infinity; let maxTime = -Infinity;
@ -184,7 +199,9 @@ export class MarketDataService {
skipDuplicates: true skipDuplicates: true
}); });
} }
}); },
{ timeout: DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_TIMEOUT }
);
} }
public async updateAssetProfileIdentifier( public async updateAssetProfileIdentifier(

3
apps/api/src/services/queues/data-gathering/data-gathering.module.ts

@ -28,7 +28,8 @@ import { DataGatheringProcessor } from './data-gathering.processor';
}), }),
BullModule.registerQueue({ BullModule.registerQueue({
limiter: { limiter: {
duration: ms('4 seconds'), duration: ms('3 seconds'),
groupKey: 'dataSource',
max: 1 max: 1
}, },
name: DATA_GATHERING_QUEUE name: DATA_GATHERING_QUEUE

21
apps/api/src/services/queues/data-gathering/data-gathering.processor.ts

@ -10,7 +10,11 @@ import {
GATHER_ASSET_PROFILE_PROCESS_JOB_NAME, GATHER_ASSET_PROFILE_PROCESS_JOB_NAME,
GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { DATE_FORMAT, getStartOfUtcDate } from '@ghostfolio/common/helper'; import {
DATE_FORMAT,
getAssetProfileIdentifier,
getStartOfUtcDate
} from '@ghostfolio/common/helper';
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { Process, Processor } from '@nestjs/bull'; import { Process, Processor } from '@nestjs/bull';
@ -114,6 +118,11 @@ export class DataGatheringProcessor {
to: new Date() to: new Date()
}); });
const assetProfileIdentifier = getAssetProfileIdentifier({
dataSource,
symbol
});
const data: Prisma.MarketDataUpdateInput[] = []; const data: Prisma.MarketDataUpdateInput[] = [];
let lastMarketPrice: number; let lastMarketPrice: number;
@ -131,12 +140,14 @@ export class DataGatheringProcessor {
) )
) { ) {
if ( if (
historicalData[symbol]?.[format(currentDate, DATE_FORMAT)] historicalData[assetProfileIdentifier]?.[
?.marketPrice format(currentDate, DATE_FORMAT)
]?.marketPrice
) { ) {
lastMarketPrice = lastMarketPrice =
historicalData[symbol]?.[format(currentDate, DATE_FORMAT)] historicalData[assetProfileIdentifier]?.[
?.marketPrice; format(currentDate, DATE_FORMAT)
]?.marketPrice;
} }
if (lastMarketPrice) { if (lastMarketPrice) {

265
apps/api/src/services/queues/data-gathering/data-gathering.service.ts

@ -2,6 +2,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
@ -17,6 +18,7 @@ import {
import { import {
DATE_FORMAT, DATE_FORMAT,
getAssetProfileIdentifier, getAssetProfileIdentifier,
getStartOfUtcDate,
resetHours resetHours
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
import { import {
@ -26,7 +28,7 @@ import {
import { InjectQueue } from '@nestjs/bull'; import { InjectQueue } from '@nestjs/bull';
import { Inject, Injectable, Logger } from '@nestjs/common'; import { Inject, Injectable, Logger } from '@nestjs/common';
import { DataSource } from '@prisma/client'; import { Prisma } from '@prisma/client';
import { JobOptions, Queue } from 'bull'; import { JobOptions, Queue } from 'bull';
import { format, min, subDays, subMilliseconds, subYears } from 'date-fns'; import { format, min, subDays, subMilliseconds, subYears } from 'date-fns';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
@ -43,6 +45,7 @@ export class DataGatheringService {
private readonly dataGatheringQueue: Queue, private readonly dataGatheringQueue: Queue,
private readonly dataProviderService: DataProviderService, private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService, private readonly exchangeRateDataService: ExchangeRateDataService,
private readonly marketDataService: MarketDataService,
private readonly prismaService: PrismaService, private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService, private readonly propertyService: PropertyService,
private readonly symbolProfileService: SymbolProfileService private readonly symbolProfileService: SymbolProfileService
@ -66,93 +69,6 @@ export class DataGatheringService {
return this.dataGatheringQueue.addBulk(jobs); return this.dataGatheringQueue.addBulk(jobs);
} }
public async gather7Days() {
await this.gatherSymbols({
dataGatheringItems: await this.getCurrencies7D(),
priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH
});
await this.gatherSymbols({
dataGatheringItems: await this.getSymbols7D({
withUserSubscription: true
}),
priority: DATA_GATHERING_QUEUE_PRIORITY_MEDIUM
});
await this.gatherSymbols({
dataGatheringItems: await this.getSymbols7D({
withUserSubscription: false
}),
priority: DATA_GATHERING_QUEUE_PRIORITY_LOW
});
}
public async gatherMax() {
const dataGatheringItems = await this.getSymbolsMax();
await this.gatherSymbols({
dataGatheringItems,
priority: DATA_GATHERING_QUEUE_PRIORITY_LOW
});
}
public async gatherSymbol({ dataSource, date, symbol }: DataGatheringItem) {
const dataGatheringItems = (await this.getSymbolsMax())
.filter((dataGatheringItem) => {
return (
dataGatheringItem.dataSource === dataSource &&
dataGatheringItem.symbol === symbol
);
})
.map((item) => ({
...item,
date: date ?? item.date
}));
await this.gatherSymbols({
dataGatheringItems,
force: true,
priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH
});
}
public async gatherSymbolForDate({
dataSource,
date,
symbol
}: {
dataSource: DataSource;
date: Date;
symbol: string;
}) {
try {
const historicalData = await this.dataProviderService.getHistoricalRaw({
assetProfileIdentifiers: [{ dataSource, symbol }],
from: date,
to: date
});
const marketPrice =
historicalData[symbol][format(date, DATE_FORMAT)].marketPrice;
if (marketPrice) {
return await this.prismaService.marketData.upsert({
create: {
dataSource,
date,
marketPrice,
symbol
},
update: { marketPrice },
where: { dataSource_date_symbol: { dataSource, date, symbol } }
});
}
} catch (error) {
this.logger.error(error);
} finally {
return undefined;
}
}
public async gatherAssetProfiles( public async gatherAssetProfiles(
aAssetProfileIdentifiers?: AssetProfileIdentifier[] aAssetProfileIdentifiers?: AssetProfileIdentifier[]
) { ) {
@ -177,7 +93,9 @@ export class DataGatheringService {
assetProfileIdentifiers assetProfileIdentifiers
); );
for (const [symbol, assetProfile] of Object.entries(assetProfiles)) { for (const assetProfile of Object.values(assetProfiles)) {
const { symbol } = assetProfile;
const symbolProfile = symbolProfiles.find( const symbolProfile = symbolProfiles.find(
({ symbol: symbolProfileSymbol }) => { ({ symbol: symbolProfileSymbol }) => {
return symbolProfileSymbol === symbol; return symbolProfileSymbol === symbol;
@ -279,6 +197,137 @@ export class DataGatheringService {
} }
} }
public async gatherHourlyMarketData() {
try {
await this.exchangeRateDataService.loadCurrencies();
} catch (error) {
this.logger.error('Could not gather exchange rates', error);
}
const assetProfileIdentifiers =
await this.getHourlyAssetProfileIdentifiers();
if (assetProfileIdentifiers.length <= 0) {
return;
}
const date = getStartOfUtcDate(new Date());
try {
const quotes = await this.dataProviderService.getQuotes({
items: assetProfileIdentifiers,
useCache: false
});
const data: Prisma.MarketDataUpdateInput[] = [];
for (const { dataSource, symbol } of assetProfileIdentifiers) {
const quote = quotes[getAssetProfileIdentifier({ dataSource, symbol })];
if (!quote?.marketPrice) {
continue;
}
data.push({
dataSource,
date,
symbol,
marketPrice: quote.marketPrice,
state: 'INTRADAY'
});
}
await this.marketDataService.updateMany({ data });
} catch (error) {
this.logger.error('Could not gather hourly market data', error);
}
}
public async gatherMax() {
const dataGatheringItems = await this.getSymbolsMax();
await this.gatherSymbols({
dataGatheringItems,
priority: DATA_GATHERING_QUEUE_PRIORITY_LOW
});
}
public async gatherRecentMarketData() {
await this.gatherSymbols({
dataGatheringItems: await this.getCurrencies7D(),
priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH
});
await this.gatherSymbols({
dataGatheringItems: await this.getSymbols7D({
withUserSubscription: true
}),
priority: DATA_GATHERING_QUEUE_PRIORITY_MEDIUM
});
await this.gatherSymbols({
dataGatheringItems: await this.getSymbols7D({
withUserSubscription: false
}),
priority: DATA_GATHERING_QUEUE_PRIORITY_LOW
});
}
public async gatherSymbol({ dataSource, date, symbol }: DataGatheringItem) {
const dataGatheringItems = (await this.getSymbolsMax())
.filter((dataGatheringItem) => {
return (
dataGatheringItem.dataSource === dataSource &&
dataGatheringItem.symbol === symbol
);
})
.map((item) => ({
...item,
date: date ?? item.date
}));
await this.gatherSymbols({
dataGatheringItems,
force: true,
priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH
});
}
public async gatherSymbolForDate({
dataSource,
date,
symbol
}: { date: Date } & AssetProfileIdentifier) {
try {
const historicalData = await this.dataProviderService.getHistoricalRaw({
assetProfileIdentifiers: [{ dataSource, symbol }],
from: date,
to: date
});
const marketPrice =
historicalData[getAssetProfileIdentifier({ dataSource, symbol })][
format(date, DATE_FORMAT)
].marketPrice;
if (marketPrice) {
return await this.prismaService.marketData.upsert({
create: {
dataSource,
date,
marketPrice,
symbol
},
update: { marketPrice },
where: { dataSource_date_symbol: { dataSource, date, symbol } }
});
}
} catch (error) {
this.logger.error(error);
} finally {
return undefined;
}
}
public async gatherSymbols({ public async gatherSymbols({
dataGatheringItems, dataGatheringItems,
force = false, force = false,
@ -389,6 +438,36 @@ export class DataGatheringService {
return min([aStartDate, subYears(new Date(), 10)]); return min([aStartDate, subYears(new Date(), 10)]);
} }
private async getHourlyAssetProfileIdentifiers(): Promise<
AssetProfileIdentifier[]
> {
const symbolProfiles = await this.prismaService.symbolProfile.findMany({
orderBy: [{ symbol: 'asc' }, { dataSource: 'asc' }],
select: {
dataSource: true,
scraperConfiguration: true,
symbol: true
},
where: {
dataGatheringFrequency: 'HOURLY',
isActive: true
}
});
return symbolProfiles
.filter(({ dataSource, scraperConfiguration }) => {
const manualDataSourceWithScraperConfiguration =
dataSource === 'MANUAL' && !isEmpty(scraperConfiguration);
return (
dataSource !== 'MANUAL' || manualDataSourceWithScraperConfiguration
);
})
.map(({ dataSource, symbol }) => {
return { dataSource, symbol };
});
}
private async getSymbols7D({ private async getSymbols7D({
withUserSubscription = false withUserSubscription = false
}: { }: {
@ -469,14 +548,12 @@ export class DataGatheringService {
} }
}) })
) )
.filter((symbolProfile) => { .filter(({ dataSource, scraperConfiguration }) => {
const manualDataSourceWithScraperConfiguration = const manualDataSourceWithScraperConfiguration =
symbolProfile.dataSource === 'MANUAL' && dataSource === 'MANUAL' && !isEmpty(scraperConfiguration);
!isEmpty(symbolProfile.scraperConfiguration);
return ( return (
symbolProfile.dataSource !== 'MANUAL' || dataSource !== 'MANUAL' || manualDataSourceWithScraperConfiguration
manualDataSourceWithScraperConfiguration
); );
}) })
.map((symbolProfile) => { .map((symbolProfile) => {

37
apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts

@ -2,6 +2,7 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con
import { FetchService } from '@ghostfolio/api/services/fetch/fetch.service'; import { FetchService } from '@ghostfolio/api/services/fetch/fetch.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { import {
DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY,
GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME, GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME,
GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME,
GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME,
@ -35,7 +36,14 @@ export class StatisticsGatheringProcessor {
private readonly propertyService: PropertyService private readonly propertyService: PropertyService
) {} ) {}
@Process(GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME) @Process({
concurrency: parseInt(
process.env.PROCESSOR_GATHER_STATISTICS_CONCURRENCY ??
DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY.toString(),
10
),
name: GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME
})
public async gatherDockerHubPullsStatistics() { public async gatherDockerHubPullsStatistics() {
this.logger.log('Docker Hub pulls statistics gathering has been started'); this.logger.log('Docker Hub pulls statistics gathering has been started');
@ -49,7 +57,14 @@ export class StatisticsGatheringProcessor {
this.logger.log('Docker Hub pulls statistics gathering has been completed'); this.logger.log('Docker Hub pulls statistics gathering has been completed');
} }
@Process(GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME) @Process({
concurrency: parseInt(
process.env.PROCESSOR_GATHER_STATISTICS_CONCURRENCY ??
DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY.toString(),
10
),
name: GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME
})
public async gatherGitHubContributorsStatistics() { public async gatherGitHubContributorsStatistics() {
this.logger.log( this.logger.log(
'GitHub contributors statistics gathering has been started' 'GitHub contributors statistics gathering has been started'
@ -67,7 +82,14 @@ export class StatisticsGatheringProcessor {
); );
} }
@Process(GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME) @Process({
concurrency: parseInt(
process.env.PROCESSOR_GATHER_STATISTICS_CONCURRENCY ??
DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY.toString(),
10
),
name: GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME
})
public async gatherGitHubStargazersStatistics() { public async gatherGitHubStargazersStatistics() {
this.logger.log('GitHub stargazers statistics gathering has been started'); this.logger.log('GitHub stargazers statistics gathering has been started');
@ -83,7 +105,14 @@ export class StatisticsGatheringProcessor {
); );
} }
@Process(GATHER_STATISTICS_UPTIME_PROCESS_JOB_NAME) @Process({
concurrency: parseInt(
process.env.PROCESSOR_GATHER_STATISTICS_CONCURRENCY ??
DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY.toString(),
10
),
name: GATHER_STATISTICS_UPTIME_PROCESS_JOB_NAME
})
public async gatherUptimeStatistics() { public async gatherUptimeStatistics() {
const monitorId = await this.propertyService.getByKey<string>( const monitorId = await this.propertyService.getByKey<string>(
PROPERTY_BETTER_UPTIME_MONITOR_ID PROPERTY_BETTER_UPTIME_MONITOR_ID

2
apps/api/src/services/symbol-profile/symbol-profile.service.ts

@ -178,6 +178,7 @@ export class SymbolProfileService {
comment, comment,
countries, countries,
currency, currency,
dataGatheringFrequency,
holdings, holdings,
isActive, isActive,
name, name,
@ -195,6 +196,7 @@ export class SymbolProfileService {
comment, comment,
countries, countries,
currency, currency,
dataGatheringFrequency,
holdings, holdings,
isActive, isActive,
name, name,

4
apps/api/src/services/twitter-bot/twitter-bot.service.ts

@ -3,7 +3,7 @@ import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.s
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { import {
ghostfolioFearAndGreedIndexDataSourceStocks, ghostfolioFearAndGreedIndexDataSourceStocks,
ghostfolioFearAndGreedIndexSymbol ghostfolioFearAndGreedIndexSymbolStocks
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { import {
resolveFearAndGreedIndex, resolveFearAndGreedIndex,
@ -49,7 +49,7 @@ export class TwitterBotService implements OnModuleInit {
const symbolItem = await this.symbolService.get({ const symbolItem = await this.symbolService.get({
dataGatheringItem: { dataGatheringItem: {
dataSource: ghostfolioFearAndGreedIndexDataSourceStocks, dataSource: ghostfolioFearAndGreedIndexDataSourceStocks,
symbol: ghostfolioFearAndGreedIndexSymbol symbol: ghostfolioFearAndGreedIndexSymbolStocks
} }
}); });

12
apps/client/src/app/app.component.ts

@ -1,5 +1,9 @@
import { getCssVariable } from '@ghostfolio/common/helper'; import { getCssVariable } from '@ghostfolio/common/helper';
import { InfoItem, User } from '@ghostfolio/common/interfaces'; import {
AssetProfileIdentifier,
InfoItem,
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { ColorScheme } from '@ghostfolio/common/types'; import { ColorScheme } from '@ghostfolio/common/types';
@ -27,7 +31,6 @@ import {
RouterLink, RouterLink,
RouterOutlet RouterOutlet
} from '@angular/router'; } from '@angular/router';
import { DataSource } from '@prisma/client';
import { Chart } from 'chart.js'; import { Chart } from 'chart.js';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { openOutline } from 'ionicons/icons'; import { openOutline } from 'ionicons/icons';
@ -269,10 +272,7 @@ export class GfAppComponent implements OnInit {
private openHoldingDetailDialog({ private openHoldingDetailDialog({
dataSource, dataSource,
symbol symbol
}: { }: AssetProfileIdentifier) {
dataSource: DataSource;
symbol: string;
}) {
this.userService this.userService
.get() .get()
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))

2
apps/client/src/app/components/access-table/access-table.component.html

@ -9,7 +9,7 @@
<ng-container matColumnDef="grantee"> <ng-container matColumnDef="grantee">
<th *matHeaderCellDef class="px-1" i18n mat-header-cell>Grantee</th> <th *matHeaderCellDef class="px-1" i18n mat-header-cell>Grantee</th>
<td *matCellDef="let element" class="px-1" mat-cell> <td *matCellDef="let element" class="px-1 text-nowrap" mat-cell>
{{ element.grantee }} {{ element.grantee }}
</td> </td>
</ng-container> </ng-container>

10
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts

@ -3,7 +3,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service';
import { import {
DEFAULT_DATE_RANGE, DEFAULT_DATE_RANGE,
DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE,
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { CreateAccountBalanceDto } from '@ghostfolio/common/dtos'; import { CreateAccountBalanceDto } from '@ghostfolio/common/dtos';
import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper';
@ -245,7 +245,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
this.balance = balance; this.balance = balance;
if ( if (
this.balance >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES && this.balance >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES &&
this.data.deviceType === 'mobile' this.data.deviceType === 'mobile'
) { ) {
this.balancePrecision = 0; this.balancePrecision = 0;
@ -257,7 +257,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.dividendInBaseCurrency >= this.dividendInBaseCurrency >=
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.dividendInBaseCurrencyPrecision = 0; this.dividendInBaseCurrencyPrecision = 0;
} }
@ -267,7 +267,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.equity >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES this.equity >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.equityPrecision = 0; this.equityPrecision = 0;
} }
@ -280,7 +280,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.interestInBaseCurrency >= this.interestInBaseCurrency >=
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.interestInBaseCurrencyPrecision = 0; this.interestInBaseCurrencyPrecision = 0;
} }

2
apps/client/src/app/components/admin-jobs/admin-jobs.html

@ -27,7 +27,7 @@
<ng-container matColumnDef="index"> <ng-container matColumnDef="index">
<th <th
*matHeaderCellDef *matHeaderCellDef
class="px-1 py-2 text-right" class="justify-content-end px-1 py-2"
mat-header-cell mat-header-cell
mat-sort-header="id" mat-sort-header="id"
> >

27
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts

@ -305,17 +305,6 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
); );
} }
protected onGather7Days() {
this.adminService
.gather7Days()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
setTimeout(() => {
window.location.reload();
}, 300);
});
}
protected onGatherMax() { protected onGatherMax() {
this.adminService this.adminService
.gatherMax() .gatherMax()
@ -334,6 +323,17 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
.subscribe(); .subscribe();
} }
protected onGatherRecentMarketData() {
this.adminService
.gatherRecentMarketData()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
setTimeout(() => {
window.location.reload();
}, 300);
});
}
protected onOpenAssetProfileDialog({ protected onOpenAssetProfileDialog({
dataSource, dataSource,
symbol symbol
@ -408,10 +408,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
private openAssetProfileDialog({ private openAssetProfileDialog({
dataSource, dataSource,
symbol symbol
}: { }: AssetProfileIdentifier) {
dataSource: DataSource;
symbol: string;
}) {
this.userService this.userService
.get() .get()
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))

5
apps/client/src/app/components/admin-market-data/admin-market-data.html

@ -220,7 +220,7 @@
class="no-max-width" class="no-max-width"
xPosition="before" xPosition="before"
> >
<button mat-menu-item (click)="onGather7Days()"> <button mat-menu-item (click)="onGatherRecentMarketData()">
<ng-container i18n <ng-container i18n
>Gather Recent Historical Market Data</ng-container >Gather Recent Historical Market Data</ng-container
> >
@ -285,7 +285,8 @@
!canDeleteAssetProfile({ !canDeleteAssetProfile({
activitiesCount: element.activitiesCount, activitiesCount: element.activitiesCount,
isBenchmark: element.isBenchmark, isBenchmark: element.isBenchmark,
symbol: element.symbol symbol: element.symbol,
watchedByCount: element.watchedByCount
}) })
" "
(click)=" (click)="

23
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -74,6 +74,7 @@ import { IonIcon } from '@ionic/angular/standalone';
import { import {
AssetClass, AssetClass,
AssetSubClass, AssetSubClass,
DataGatheringFrequency,
MarketData, MarketData,
Prisma, Prisma,
SymbolProfile SymbolProfile
@ -155,6 +156,7 @@ export class GfAssetProfileDialogComponent implements OnInit {
comment: '', comment: '',
countries: ['', jsonValidator()], countries: ['', jsonValidator()],
currency: '', currency: '',
dataGatheringFrequency: new FormControl<DataGatheringFrequency>('DAILY'),
historicalData: this.formBuilder.group({ historicalData: this.formBuilder.group({
csvString: '' csvString: ''
}), }),
@ -199,6 +201,20 @@ export class GfAssetProfileDialogComponent implements OnInit {
protected currencies: string[] = []; protected currencies: string[] = [];
protected readonly dataGatheringFrequencyValues: {
value: DataGatheringFrequency;
viewValue: string;
}[] = [
{
value: 'DAILY',
viewValue: $localize`Daily`
},
{
value: 'HOURLY',
viewValue: $localize`Hourly`
}
];
protected readonly dateRangeOptions = [ protected readonly dateRangeOptions = [
{ {
label: $localize`Current week` + ' (' + $localize`WTD` + ')', label: $localize`Current week` + ' (' + $localize`WTD` + ')',
@ -401,6 +417,8 @@ export class GfAssetProfileDialogComponent implements OnInit {
}) ?? [] }) ?? []
), ),
currency: this.assetProfile?.currency ?? null, currency: this.assetProfile?.currency ?? null,
dataGatheringFrequency:
this.assetProfile?.dataGatheringFrequency ?? 'DAILY',
historicalData: { historicalData: {
csvString: GfAssetProfileDialogComponent.HISTORICAL_DATA_TEMPLATE csvString: GfAssetProfileDialogComponent.HISTORICAL_DATA_TEMPLATE
}, },
@ -532,7 +550,7 @@ export class GfAssetProfileDialogComponent implements OnInit {
) as Record<string, string>, ) as Record<string, string>,
locale: locale:
this.assetProfileForm.controls.scraperConfiguration.controls.locale this.assetProfileForm.controls.scraperConfiguration.controls.locale
?.value ?? undefined, ?.value || undefined,
mode: mode:
this.assetProfileForm.controls.scraperConfiguration.controls.mode this.assetProfileForm.controls.scraperConfiguration.controls.mode
?.value ?? undefined, ?.value ?? undefined,
@ -583,6 +601,9 @@ export class GfAssetProfileDialogComponent implements OnInit {
this.assetProfileForm.controls.assetSubClass.value ?? undefined, this.assetProfileForm.controls.assetSubClass.value ?? undefined,
comment: this.assetProfileForm.controls.comment.value || undefined, comment: this.assetProfileForm.controls.comment.value || undefined,
currency: this.assetProfileForm.controls.currency.value ?? undefined, currency: this.assetProfileForm.controls.currency.value ?? undefined,
dataGatheringFrequency:
this.assetProfileForm.controls.dataGatheringFrequency.value ??
undefined,
isActive: isBoolean(this.assetProfileForm.controls.isActive.value) isActive: isBoolean(this.assetProfileForm.controls.isActive.value)
? this.assetProfileForm.controls.isActive.value ? this.assetProfileForm.controls.isActive.value
: undefined, : undefined,

24
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html

@ -113,7 +113,7 @@
<ion-icon name="reader-outline" /> <ion-icon name="reader-outline" />
<div class="d-none d-sm-block ml-2" i18n>Overview</div> <div class="d-none d-sm-block ml-2" i18n>Overview</div>
</ng-template> </ng-template>
<div class="container mt-3 p-0"> <div class="container px-0 py-3">
<div class="row w-100"> <div class="row w-100">
@if (isEditAssetProfileIdentifierMode) { @if (isEditAssetProfileIdentifierMode) {
<div class="col-12 mb-4"> <div class="col-12 mb-4">
@ -165,7 +165,11 @@
</div> </div>
} @else { } @else {
<div class="col-6 mb-3"> <div class="col-6 mb-3">
<gf-value i18n size="medium" [value]="assetProfile?.symbol" <gf-value
i18n
size="medium"
[enableCopyToClipboardButton]="true"
[value]="assetProfile?.symbol"
>Symbol</gf-value >Symbol</gf-value
> >
</div> </div>
@ -202,6 +206,7 @@
<div class="col-6 mb-3"> <div class="col-6 mb-3">
<gf-value <gf-value
size="medium" size="medium"
[enableCopyToClipboardButton]="true"
[hidden]="!assetProfile?.isin" [hidden]="!assetProfile?.isin"
[value]="assetProfile?.isin" [value]="assetProfile?.isin"
>ISIN</gf-value >ISIN</gf-value
@ -444,6 +449,21 @@
></textarea> ></textarea>
</mat-form-field> </mat-form-field>
</div> </div>
<div>
<mat-form-field appearance="outline" class="w-100 without-hint">
<mat-label i18n>Data Gathering Frequency</mat-label>
<mat-select formControlName="dataGatheringFrequency">
@for (
dataGatheringFrequencyValue of dataGatheringFrequencyValues;
track dataGatheringFrequencyValue.value
) {
<mat-option [value]="dataGatheringFrequencyValue.value">{{
dataGatheringFrequencyValue.viewValue
}}</mat-option>
}
</mat-select>
</mat-form-field>
</div>
</form> </form>
</div> </div>
</mat-tab> </mat-tab>

6
apps/client/src/app/components/admin-platform/admin-platform.component.html

@ -96,3 +96,9 @@
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr> <tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
<tr *matRowDef="let row; columns: displayedColumns" mat-row></tr> <tr *matRowDef="let row; columns: displayedColumns" mat-row></tr>
</table> </table>
<mat-paginator
[class.d-none]="dataSource.data.length <= pageSize"
[hidePageSize]="true"
[pageSize]="pageSize"
/>

6
apps/client/src/app/components/admin-platform/admin-platform.component.ts

@ -1,4 +1,5 @@
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos'; import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { getLocale, getLowercase } from '@ghostfolio/common/helper'; import { getLocale, getLowercase } from '@ghostfolio/common/helper';
@ -22,6 +23,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { MatMenuModule } from '@angular/material/menu'; import { MatMenuModule } from '@angular/material/menu';
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
import { MatSort, MatSortModule } from '@angular/material/sort'; import { MatSort, MatSortModule } from '@angular/material/sort';
import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { ActivatedRoute, Router, RouterModule } from '@angular/router';
@ -46,6 +48,7 @@ import { CreateOrUpdatePlatformDialogParams } from './create-or-update-platform-
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,
MatMenuModule, MatMenuModule,
MatPaginatorModule,
MatSortModule, MatSortModule,
MatTableModule, MatTableModule,
RouterModule RouterModule
@ -59,11 +62,13 @@ export class GfAdminPlatformComponent implements OnInit {
protected dataSource = new MatTableDataSource<Platform>(); protected dataSource = new MatTableDataSource<Platform>();
protected readonly displayedColumns = ['name', 'url', 'accounts', 'actions']; protected readonly displayedColumns = ['name', 'url', 'accounts', 'actions'];
protected readonly pageSize = DEFAULT_PAGE_SIZE;
protected platforms: Platform[]; protected platforms: Platform[];
private readonly deviceType = computed( private readonly deviceType = computed(
() => this.deviceDetectorService.deviceInfo().deviceType () => this.deviceDetectorService.deviceInfo().deviceType
); );
private readonly paginator = viewChild.required(MatPaginator);
private readonly sort = viewChild.required(MatSort); private readonly sort = viewChild.required(MatSort);
private readonly adminService = inject(AdminService); private readonly adminService = inject(AdminService);
@ -145,6 +150,7 @@ export class GfAdminPlatformComponent implements OnInit {
this.platforms = platforms; this.platforms = platforms;
this.dataSource = new MatTableDataSource(platforms); this.dataSource = new MatTableDataSource(platforms);
this.dataSource.paginator = this.paginator();
this.dataSource.sort = this.sort(); this.dataSource.sort = this.sort();
this.dataSource.sortingDataAccessor = getLowercase; this.dataSource.sortingDataAccessor = getLowercase;

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

@ -10,7 +10,33 @@
} }
.mat-mdc-card { .mat-mdc-card {
--mat-card-outlined-container-color: whitesmoke; --gradient-opacity: 50%;
--mat-card-outlined-outline-color: rgb(193, 219, 254);
background-color: white;
background-image: linear-gradient(
109.6deg,
color-mix(in srgb, rgba(255, 255, 255, 1) 100%, transparent) 11.2%,
color-mix(
in srgb,
rgba(221, 108, 241, 0.26) var(--gradient-opacity),
transparent
)
42%,
color-mix(
in srgb,
rgba(229, 106, 253, 0.71) var(--gradient-opacity),
transparent
)
71.5%,
color-mix(
in srgb,
rgba(123, 183, 253, 1) var(--gradient-opacity),
transparent
)
100%
);
color: rgb(var(--dark-primary-text));
.mat-mdc-card-actions { .mat-mdc-card-actions {
min-height: 0; min-height: 0;
@ -32,6 +58,6 @@
:host-context(.theme-dark) { :host-context(.theme-dark) {
.mat-mdc-card { .mat-mdc-card {
--mat-card-outlined-container-color: #222222; --mat-card-outlined-outline-color: white;
} }
} }

6
apps/client/src/app/components/admin-tag/admin-tag.component.html

@ -89,3 +89,9 @@
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr> <tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
<tr *matRowDef="let row; columns: displayedColumns" mat-row></tr> <tr *matRowDef="let row; columns: displayedColumns" mat-row></tr>
</table> </table>
<mat-paginator
[class.d-none]="dataSource.data.length <= pageSize"
[hidePageSize]="true"
[pageSize]="pageSize"
/>

6
apps/client/src/app/components/admin-tag/admin-tag.component.ts

@ -1,4 +1,5 @@
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos'; import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { getLocale, getLowercase } from '@ghostfolio/common/helper'; import { getLocale, getLowercase } from '@ghostfolio/common/helper';
@ -21,6 +22,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { MatMenuModule } from '@angular/material/menu'; import { MatMenuModule } from '@angular/material/menu';
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
import { MatSort, MatSortModule } from '@angular/material/sort'; import { MatSort, MatSortModule } from '@angular/material/sort';
import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { ActivatedRoute, Router, RouterModule } from '@angular/router';
@ -44,6 +46,7 @@ import { CreateOrUpdateTagDialogParams } from './create-or-update-tag-dialog/int
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,
MatMenuModule, MatMenuModule,
MatPaginatorModule,
MatSortModule, MatSortModule,
MatTableModule, MatTableModule,
RouterModule RouterModule
@ -62,11 +65,13 @@ export class GfAdminTagComponent implements OnInit {
'activities', 'activities',
'actions' 'actions'
]; ];
protected readonly pageSize = DEFAULT_PAGE_SIZE;
protected tags: Tag[]; protected tags: Tag[];
private readonly deviceType = computed( private readonly deviceType = computed(
() => this.deviceDetectorService.deviceInfo().deviceType () => this.deviceDetectorService.deviceInfo().deviceType
); );
private readonly paginator = viewChild.required(MatPaginator);
private readonly sort = viewChild.required(MatSort); private readonly sort = viewChild.required(MatSort);
private readonly changeDetectorRef = inject(ChangeDetectorRef); private readonly changeDetectorRef = inject(ChangeDetectorRef);
@ -147,6 +152,7 @@ export class GfAdminTagComponent implements OnInit {
this.tags = tags; this.tags = tags;
this.dataSource = new MatTableDataSource(this.tags); this.dataSource = new MatTableDataSource(this.tags);
this.dataSource.paginator = this.paginator();
this.dataSource.sort = this.sort(); this.dataSource.sort = this.sort();
this.dataSource.sortingDataAccessor = getLowercase; this.dataSource.sortingDataAccessor = getLowercase;

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

@ -2,7 +2,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service';
import { import {
DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE,
NUMERICAL_PRECISION_THRESHOLD_3_FIGURES, NUMERICAL_PRECISION_THRESHOLD_3_FIGURES,
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { CreateOrderDto } from '@ghostfolio/common/dtos'; import { CreateOrderDto } from '@ghostfolio/common/dtos';
import { import {
@ -116,6 +116,19 @@ export class GfHoldingDetailDialogComponent implements OnInit {
protected accounts: Account[]; protected accounts: Account[];
protected activitiesCount: number; protected activitiesCount: number;
protected assetClass: string; protected assetClass: string;
protected assetProfile: Pick<
EnhancedSymbolProfile,
| 'assetClass'
| 'assetSubClass'
| 'countries'
| 'currency'
| 'dataSource'
| 'isin'
| 'name'
| 'sectors'
| 'symbol'
| 'userId'
>;
protected assetSubClass: string; protected assetSubClass: string;
protected averagePrice: number; protected averagePrice: number;
protected averagePricePrecision = 2; protected averagePricePrecision = 2;
@ -164,7 +177,6 @@ export class GfHoldingDetailDialogComponent implements OnInit {
}; };
protected sortColumn = 'date'; protected sortColumn = 'date';
protected sortDirection: SortDirection = 'desc'; protected sortDirection: SortDirection = 'desc';
protected SymbolProfile: EnhancedSymbolProfile;
protected tagsAvailable: Tag[]; protected tagsAvailable: Tag[];
protected readonly translate = translate; protected readonly translate = translate;
protected user: User; protected user: User;
@ -266,6 +278,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
.subscribe( .subscribe(
({ ({
activitiesCount, activitiesCount,
assetProfile,
averagePrice, averagePrice,
dataProviderInfo, dataProviderInfo,
dateOfFirstActivity, dateOfFirstActivity,
@ -280,15 +293,15 @@ export class GfHoldingDetailDialogComponent implements OnInit {
netPerformancePercentWithCurrencyEffect, netPerformancePercentWithCurrencyEffect,
netPerformanceWithCurrencyEffect, netPerformanceWithCurrencyEffect,
quantity, quantity,
SymbolProfile,
tags, tags,
value value
}) => { }) => {
this.activitiesCount = activitiesCount; this.activitiesCount = activitiesCount;
this.assetProfile = assetProfile;
this.averagePrice = averagePrice; this.averagePrice = averagePrice;
if ( if (
this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES && this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES &&
this.data.deviceType === 'mobile' this.data.deviceType === 'mobile'
) { ) {
this.averagePricePrecision = 0; this.averagePricePrecision = 0;
@ -307,7 +320,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.dividendInBaseCurrency >= this.dividendInBaseCurrency >=
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.dividendInBaseCurrencyPrecision = 0; this.dividendInBaseCurrencyPrecision = 0;
} }
@ -322,8 +335,8 @@ export class GfHoldingDetailDialogComponent implements OnInit {
this.user?.permissions, this.user?.permissions,
permissions.readMarketDataOfOwnAssetProfile permissions.readMarketDataOfOwnAssetProfile
) && ) &&
SymbolProfile?.dataSource === 'MANUAL' && assetProfile?.dataSource === 'MANUAL' &&
SymbolProfile?.userId === this.user?.id; assetProfile?.userId === this.user?.id;
this.historicalDataItems = historicalData.map( this.historicalDataItems = historicalData.map(
({ averagePrice, date, marketPrice }) => { ({ averagePrice, date, marketPrice }) => {
@ -345,7 +358,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.investmentInBaseCurrencyWithCurrencyEffect >= this.investmentInBaseCurrencyWithCurrencyEffect >=
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0; this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0;
} }
@ -355,7 +368,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.marketPriceMaxPrecision = 0; this.marketPriceMaxPrecision = 0;
} }
@ -364,14 +377,14 @@ export class GfHoldingDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.marketPriceMinPrecision = 0; this.marketPriceMinPrecision = 0;
} }
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.marketPricePrecision = 0; this.marketPricePrecision = 0;
} }
@ -393,7 +406,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
if ( if (
this.data.deviceType === 'mobile' && this.data.deviceType === 'mobile' &&
this.netPerformanceWithCurrencyEffect >= this.netPerformanceWithCurrencyEffect >=
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) { ) {
this.netPerformanceWithCurrencyEffectPrecision = 0; this.netPerformanceWithCurrencyEffectPrecision = 0;
} }
@ -402,7 +415,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
if (Number.isInteger(this.quantity)) { if (Number.isInteger(this.quantity)) {
this.quantityPrecision = 0; this.quantityPrecision = 0;
} else if (SymbolProfile?.assetSubClass === 'CRYPTOCURRENCY') { } else if (assetProfile?.assetSubClass === 'CRYPTOCURRENCY') {
if (this.quantity < 10) { if (this.quantity < 10) {
this.quantityPrecision = 8; this.quantityPrecision = 8;
} else if (this.quantity < 1000) { } else if (this.quantity < 1000) {
@ -412,9 +425,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
} }
} }
this.reportDataGlitchMail = `mailto:hi@ghostfol.io?Subject=Ghostfolio Data Glitch Report&body=Hello%0D%0DI would like to report a data glitch for%0D%0DSymbol: ${SymbolProfile?.symbol}%0DData Source: ${SymbolProfile?.dataSource}%0D%0DAdditional notes:%0D%0DCan you please take a look?%0D%0DKind regards`;
this.sectors = {}; this.sectors = {};
this.SymbolProfile = SymbolProfile;
this.tags = tags.map((tag) => { this.tags = tags.map((tag) => {
return { return {
@ -427,16 +438,22 @@ export class GfHoldingDetailDialogComponent implements OnInit {
this.value = value; this.value = value;
if (SymbolProfile?.assetClass) { const reportDataGlitchSubject = `Ghostfolio Data Glitch Report${
this.assetClass = translate(SymbolProfile?.assetClass); this.assetProfile?.symbol ? ` (${this.assetProfile.symbol})` : ''
}`;
this.reportDataGlitchMail = `mailto:hi@ghostfol.io?Subject=${reportDataGlitchSubject}&body=Hello%0D%0DI would like to report a data glitch for%0D%0DSymbol: ${this.assetProfile?.symbol}%0DData Source: ${this.assetProfile?.dataSource}%0D%0DAdditional notes:%0D%0DCan you please take a look?%0D%0DKind regards`;
if (this.assetProfile?.assetClass) {
this.assetClass = translate(this.assetProfile?.assetClass);
} }
if (SymbolProfile?.assetSubClass) { if (this.assetProfile?.assetSubClass) {
this.assetSubClass = translate(SymbolProfile?.assetSubClass); this.assetSubClass = translate(this.assetProfile?.assetSubClass);
} }
if (SymbolProfile?.countries?.length > 0) { if (this.assetProfile?.countries?.length > 0) {
for (const country of SymbolProfile.countries) { for (const country of this.assetProfile.countries) {
this.countries[country.code] = { this.countries[country.code] = {
name: getCountryName({ code: country.code }), name: getCountryName({ code: country.code }),
value: country.weight value: country.weight
@ -444,8 +461,8 @@ export class GfHoldingDetailDialogComponent implements OnInit {
} }
} }
if (SymbolProfile?.sectors?.length > 0) { if (this.assetProfile?.sectors?.length > 0) {
for (const sector of SymbolProfile.sectors) { for (const sector of this.assetProfile.sectors) {
this.sectors[sector.name] = { this.sectors[sector.name] = {
name: translate(sector.name), name: translate(sector.name),
value: sector.weight value: sector.weight
@ -565,12 +582,12 @@ export class GfHoldingDetailDialogComponent implements OnInit {
const activity: CreateOrderDto = { const activity: CreateOrderDto = {
accountId: this.accounts.length === 1 ? this.accounts[0].id : undefined, accountId: this.accounts.length === 1 ? this.accounts[0].id : undefined,
comment: undefined, comment: undefined,
currency: this.SymbolProfile?.currency ?? '', currency: this.assetProfile?.currency ?? '',
dataSource: this.SymbolProfile?.dataSource, dataSource: this.assetProfile?.dataSource,
date: today.toISOString(), date: today.toISOString(),
fee: 0, fee: 0,
quantity: this.quantity, quantity: this.quantity,
symbol: this.SymbolProfile?.symbol ?? '', symbol: this.assetProfile?.symbol ?? '',
tags: this.tags.map(({ id }) => { tags: this.tags.map(({ id }) => {
return id; return id;
}), }),
@ -601,7 +618,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
.subscribe((data) => { .subscribe((data) => {
downloadAsFile({ downloadAsFile({
content: data, content: data,
fileName: `ghostfolio-export-${this.SymbolProfile?.symbol}-${format( fileName: `ghostfolio-export-${this.assetProfile?.symbol}-${format(
parseISO(data.meta.date), parseISO(data.meta.date),
'yyyyMMddHHmm' 'yyyyMMddHHmm'
)}.json`, )}.json`,

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

@ -1,7 +1,7 @@
<gf-dialog-header <gf-dialog-header
position="center" position="center"
[deviceType]="data.deviceType" [deviceType]="data.deviceType"
[title]="SymbolProfile?.name ?? SymbolProfile?.symbol" [title]="assetProfile?.name ?? assetProfile?.symbol"
(closeButtonClicked)="onClose()" (closeButtonClicked)="onClose()"
/> />
@ -24,11 +24,11 @@
[benchmarkDataItems]="benchmarkDataItems" [benchmarkDataItems]="benchmarkDataItems"
[benchmarkLabel]="benchmarkLabel" [benchmarkLabel]="benchmarkLabel"
[colorScheme]="data.colorScheme" [colorScheme]="data.colorScheme"
[currency]="SymbolProfile?.currency" [currency]="assetProfile?.currency"
[historicalDataItems]="historicalDataItems" [historicalDataItems]="historicalDataItems"
[isAnimated]="true" [isAnimated]="true"
[label]=" [label]="
isUUID(data.symbol) ? (SymbolProfile?.name ?? data.symbol) : data.symbol isUUID(data.symbol) ? (assetProfile?.name ?? data.symbol) : data.symbol
" "
[locale]="data.locale" [locale]="data.locale"
[showGradient]="true" [showGradient]="true"
@ -60,8 +60,8 @@
[value]="netPerformanceWithCurrencyEffect" [value]="netPerformanceWithCurrencyEffect"
> >
@if ( @if (
SymbolProfile?.currency && assetProfile?.currency &&
data.baseCurrency !== SymbolProfile?.currency data.baseCurrency !== assetProfile?.currency
) { ) {
Change with currency effect Change with currency effect
} @else { } @else {
@ -80,8 +80,8 @@
[value]="netPerformancePercentWithCurrencyEffect" [value]="netPerformancePercentWithCurrencyEffect"
> >
@if ( @if (
SymbolProfile?.currency && assetProfile?.currency &&
data.baseCurrency !== SymbolProfile?.currency data.baseCurrency !== assetProfile?.currency
) { ) {
Performance with currency effect Performance with currency effect
} @else { } @else {
@ -96,7 +96,7 @@
[isCurrency]="true" [isCurrency]="true"
[locale]="data.locale" [locale]="data.locale"
[precision]="averagePricePrecision" [precision]="averagePricePrecision"
[unit]="SymbolProfile?.currency" [unit]="assetProfile?.currency"
[value]="averagePrice" [value]="averagePrice"
>Average Unit Price</gf-value >Average Unit Price</gf-value
> >
@ -108,7 +108,7 @@
[isCurrency]="true" [isCurrency]="true"
[locale]="data.locale" [locale]="data.locale"
[precision]="marketPricePrecision" [precision]="marketPricePrecision"
[unit]="SymbolProfile?.currency" [unit]="assetProfile?.currency"
[value]="marketPrice" [value]="marketPrice"
>Market Price</gf-value >Market Price</gf-value
> >
@ -124,7 +124,7 @@
[isCurrency]="true" [isCurrency]="true"
[locale]="data.locale" [locale]="data.locale"
[precision]="marketPriceMinPrecision" [precision]="marketPriceMinPrecision"
[unit]="SymbolProfile?.currency" [unit]="assetProfile?.currency"
[value]="marketPriceMin" [value]="marketPriceMin"
>Minimum Price</gf-value >Minimum Price</gf-value
> >
@ -140,7 +140,7 @@
[isCurrency]="true" [isCurrency]="true"
[locale]="data.locale" [locale]="data.locale"
[precision]="marketPriceMaxPrecision" [precision]="marketPriceMaxPrecision"
[unit]="SymbolProfile?.currency" [unit]="assetProfile?.currency"
[value]="marketPriceMax" [value]="marketPriceMax"
>Maximum Price</gf-value >Maximum Price</gf-value
> >
@ -250,23 +250,23 @@
> >
</div> </div>
@if ( @if (
SymbolProfile?.countries?.length > 0 || assetProfile?.countries?.length > 0 ||
SymbolProfile?.sectors?.length > 0 assetProfile?.sectors?.length > 0
) { ) {
@if ( @if (
SymbolProfile?.countries?.length === 1 && assetProfile?.countries?.length === 1 &&
SymbolProfile?.sectors?.length === 1 assetProfile?.sectors?.length === 1
) { ) {
<div class="col-6 mb-3"> <div class="col-6 mb-3">
<gf-value <gf-value
i18n i18n
size="medium" size="medium"
[locale]="data.locale" [locale]="data.locale"
[value]="translate(SymbolProfile.sectors[0].name)" [value]="translate(assetProfile.sectors[0].name)"
>Sector</gf-value >Sector</gf-value
> >
</div> </div>
@if (SymbolProfile?.countries?.length === 1) { @if (assetProfile?.countries?.length === 1) {
<div class="col-6 mb-3"> <div class="col-6 mb-3">
<gf-value <gf-value
i18n i18n
@ -274,7 +274,7 @@
[locale]="data.locale" [locale]="data.locale"
[value]=" [value]="
getCountryName({ getCountryName({
code: SymbolProfile.countries[0].code code: assetProfile.countries[0].code
}) })
" "
>Country</gf-value >Country</gf-value
@ -313,8 +313,8 @@
i18n i18n
size="medium" size="medium"
[enableCopyToClipboardButton]="true" [enableCopyToClipboardButton]="true"
[hidden]="!SymbolProfile?.symbol" [hidden]="!assetProfile?.symbol"
[value]="SymbolProfile?.symbol" [value]="assetProfile?.symbol"
>Symbol</gf-value >Symbol</gf-value
> >
</div> </div>
@ -322,8 +322,8 @@
<gf-value <gf-value
size="medium" size="medium"
[enableCopyToClipboardButton]="true" [enableCopyToClipboardButton]="true"
[hidden]="!SymbolProfile?.isin" [hidden]="!assetProfile?.isin"
[value]="SymbolProfile?.isin" [value]="assetProfile?.isin"
>ISIN</gf-value >ISIN</gf-value
> >
</div> </div>
@ -404,12 +404,12 @@
<div class="d-none d-sm-block ml-2" i18n>Market Data</div> <div class="d-none d-sm-block ml-2" i18n>Market Data</div>
</ng-template> </ng-template>
<gf-historical-market-data-editor <gf-historical-market-data-editor
[currency]="SymbolProfile?.currency" [currency]="assetProfile?.currency"
[dataSource]="SymbolProfile?.dataSource" [dataSource]="assetProfile?.dataSource"
[dateOfFirstActivity]="dateOfFirstActivity" [dateOfFirstActivity]="dateOfFirstActivity"
[locale]="data.locale" [locale]="data.locale"
[marketData]="marketDataItems" [marketData]="marketDataItems"
[symbol]="SymbolProfile?.symbol" [symbol]="assetProfile?.symbol"
[user]="user" [user]="user"
(marketDataChanged)="onMarketDataChanged($event)" (marketDataChanged)="onMarketDataChanged($event)"
/> />
@ -462,8 +462,8 @@
mat-stroked-button mat-stroked-button
[queryParams]="{ [queryParams]="{
assetProfileDialog: true, assetProfileDialog: true,
dataSource: SymbolProfile?.dataSource, dataSource: assetProfile?.dataSource,
symbol: SymbolProfile?.symbol symbol: assetProfile?.symbol
}" }"
[routerLink]="routerLinkAdminControlMarketData" [routerLink]="routerLinkAdminControlMarketData"
(click)="onClose()" (click)="onClose()"

4
apps/client/src/app/components/home-market/home-market.component.ts

@ -1,6 +1,6 @@
import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component'; import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { ghostfolioFearAndGreedIndexSymbol } from '@ghostfolio/common/config'; import { ghostfolioFearAndGreedIndexSymbolStocks } from '@ghostfolio/common/config';
import { resetHours } from '@ghostfolio/common/helper'; import { resetHours } from '@ghostfolio/common/helper';
import { import {
Benchmark, Benchmark,
@ -86,7 +86,7 @@ export class GfHomeMarketComponent implements OnInit {
.fetchSymbolItem({ .fetchSymbolItem({
dataSource: this.info.fearAndGreedDataSource, dataSource: this.info.fearAndGreedDataSource,
includeHistoricalData: this.numberOfDays, includeHistoricalData: this.numberOfDays,
symbol: ghostfolioFearAndGreedIndexSymbol symbol: ghostfolioFearAndGreedIndexSymbolStocks
}) })
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(({ historicalData, marketPrice }) => { .subscribe(({ historicalData, marketPrice }) => {

2
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts

@ -12,6 +12,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { NotificationService } from '@ghostfolio/ui/notifications'; import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services'; import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
@ -51,6 +52,7 @@ import { catchError } from 'rxjs/operators';
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
FormsModule, FormsModule,
GfValueComponent,
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,
MatCardModule, MatCardModule,

8
apps/client/src/app/components/user-account-settings/user-account-settings.html

@ -260,7 +260,13 @@
<div class="pr-1 w-50"> <div class="pr-1 w-50">
Ghostfolio <ng-container i18n>User ID</ng-container> Ghostfolio <ng-container i18n>User ID</ng-container>
</div> </div>
<div class="pl-1 text-monospace w-50">{{ user?.id }}</div> <div class="pl-1 w-50">
<gf-value
class="text-monospace"
[enableCopyToClipboardButton]="true"
[value]="user?.id"
/>
</div>
</div> </div>
<div class="align-items-center d-flex py-1"> <div class="align-items-center d-flex py-1">
<div class="pr-1 w-50"></div> <div class="pr-1 w-50"></div>

6
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts

@ -106,7 +106,11 @@ export class GfUserDetailDialogComponent implements OnInit {
public getSum() { public getSum() {
return getSum( return getSum(
this.subscriptionsDataSource.data.map(({ price }) => { this.subscriptionsDataSource.data
.filter(({ price }) => {
return price !== null;
})
.map(({ price }) => {
return new Big(price); return new Big(price);
}) })
).toNumber(); ).toNumber();

11
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html

@ -128,7 +128,7 @@
@if (subscriptionsDataSource.data.length > 0) { @if (subscriptionsDataSource.data.length > 0) {
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2 class="h6" i18n>Subscriptions</h2> <h2 class="h6" i18n>Subscription History</h2>
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<table <table
class="gf-table w-100" class="gf-table w-100"
@ -137,7 +137,7 @@
> >
<ng-container matColumnDef="createdAt"> <ng-container matColumnDef="createdAt">
<th *matHeaderCellDef class="px-1" mat-header-cell> <th *matHeaderCellDef class="px-1" mat-header-cell>
<ng-container i18n>Created</ng-container> <ng-container i18n>Creation</ng-container>
</th> </th>
<td *matCellDef="let element" class="px-1" mat-cell> <td *matCellDef="let element" class="px-1" mat-cell>
<gf-value <gf-value
@ -170,6 +170,10 @@
class="px-1 text-right" class="px-1 text-right"
mat-cell mat-cell
> >
@if (element.price === null) {
<span></span>
<span class="ml-1">{{ baseCurrency }}</span>
} @else {
<gf-value <gf-value
class="d-inline-block justify-content-end" class="d-inline-block justify-content-end"
[isCurrency]="true" [isCurrency]="true"
@ -177,6 +181,7 @@
[unit]="baseCurrency" [unit]="baseCurrency"
[value]="element.price" [value]="element.price"
/> />
}
</td> </td>
<td *matFooterCellDef class="px-1 text-right" mat-footer-cell> <td *matFooterCellDef class="px-1 text-right" mat-footer-cell>
<gf-value <gf-value
@ -191,7 +196,7 @@
<ng-container matColumnDef="expiresAt"> <ng-container matColumnDef="expiresAt">
<th *matHeaderCellDef class="px-1" mat-header-cell> <th *matHeaderCellDef class="px-1" mat-header-cell>
<ng-container i18n>Expires</ng-container> <ng-container i18n>Expiration</ng-container>
</th> </th>
<td *matCellDef="let element" class="px-1" mat-cell> <td *matCellDef="let element" class="px-1" mat-cell>
<gf-value <gf-value

7
apps/client/src/app/pages/accounts/transfer-balance/interfaces/interfaces.ts

@ -1,5 +1,12 @@
import { FormControl, FormGroup } from '@angular/forms';
import { Account } from '@prisma/client'; import { Account } from '@prisma/client';
export interface TransferBalanceDialogParams { export interface TransferBalanceDialogParams {
accounts: Account[]; accounts: Account[];
} }
export type TransferBalanceForm = FormGroup<{
balance: FormControl<number | string | null>;
fromAccount: FormControl<string | null>;
toAccount: FormControl<string | null>;
}>;

70
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts

@ -1,10 +1,9 @@
import { TransferBalanceDto } from '@ghostfolio/common/dtos'; import { TransferBalanceDto } from '@ghostfolio/common/dtos';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { import {
AbstractControl, FormControl,
FormBuilder,
FormGroup, FormGroup,
ReactiveFormsModule, ReactiveFormsModule,
ValidationErrors, ValidationErrors,
@ -21,7 +20,10 @@ import { MatInputModule } from '@angular/material/input';
import { MatSelectModule } from '@angular/material/select'; import { MatSelectModule } from '@angular/material/select';
import { Account } from '@prisma/client'; import { Account } from '@prisma/client';
import { TransferBalanceDialogParams } from './interfaces/interfaces'; import {
TransferBalanceDialogParams,
TransferBalanceForm
} from './interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@ -40,57 +42,63 @@ import { TransferBalanceDialogParams } from './interfaces/interfaces';
templateUrl: 'transfer-balance-dialog.html' templateUrl: 'transfer-balance-dialog.html'
}) })
export class GfTransferBalanceDialogComponent { export class GfTransferBalanceDialogComponent {
public accounts: Account[] = []; protected readonly accounts: Account[] =
public currency: string; inject<TransferBalanceDialogParams>(MAT_DIALOG_DATA).accounts;
public transferBalanceForm: FormGroup;
public constructor(
@Inject(MAT_DIALOG_DATA) public data: TransferBalanceDialogParams,
public dialogRef: MatDialogRef<GfTransferBalanceDialogComponent>,
private formBuilder: FormBuilder
) {}
public ngOnInit() { protected currency: string;
this.accounts = this.data.accounts;
this.transferBalanceForm = this.formBuilder.group( protected readonly transferBalanceForm: TransferBalanceForm = new FormGroup(
{ {
balance: ['', Validators.required], balance: new FormControl<number | string | null>('', Validators.required),
fromAccount: ['', Validators.required], fromAccount: new FormControl<string | null>('', Validators.required),
toAccount: ['', Validators.required] toAccount: new FormControl<string | null>('', Validators.required)
}, },
{ {
validators: this.compareAccounts validators: this.compareAccounts
} }
); );
this.transferBalanceForm.get('fromAccount').valueChanges.subscribe((id) => { private readonly dialogRef =
this.currency = this.accounts.find((account) => { inject<MatDialogRef<GfTransferBalanceDialogComponent>>(MatDialogRef);
public ngOnInit() {
this.transferBalanceForm.controls.fromAccount.valueChanges.subscribe(
(id) => {
const currency = this.accounts.find((account) => {
return account.id === id; return account.id === id;
}).currency; })?.currency;
});
if (currency) {
this.currency = currency;
}
}
);
} }
public onCancel() { protected onCancel() {
this.dialogRef.close(); this.dialogRef.close();
} }
public onSubmit() { protected onSubmit() {
const account: TransferBalanceDto = { const account: TransferBalanceDto = {
accountIdFrom: this.transferBalanceForm.get('fromAccount').value, accountIdFrom: this.transferBalanceForm.controls.fromAccount.value ?? '',
accountIdTo: this.transferBalanceForm.get('toAccount').value, accountIdTo: this.transferBalanceForm.controls.toAccount.value ?? '',
balance: this.transferBalanceForm.get('balance').value balance: Number(this.transferBalanceForm.controls.balance.value)
}; };
this.dialogRef.close({ account }); this.dialogRef.close({ account });
} }
private compareAccounts(control: AbstractControl): ValidationErrors { private compareAccounts(
const accountFrom = control.get('fromAccount'); formGroup: TransferBalanceForm
const accountTo = control.get('toAccount'); ): ValidationErrors | null {
const accountFrom = formGroup.controls.fromAccount;
const accountTo = formGroup.controls.toAccount;
if (accountFrom.value === accountTo.value) { if (accountFrom.value === accountTo.value) {
return { invalid: true }; return { invalid: true };
} }
return null;
} }
} }

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

@ -94,7 +94,7 @@ export class GfApiPageComponent implements OnInit {
private fetchAssetProfile({ symbol }: { symbol: string }) { private fetchAssetProfile({ symbol }: { symbol: string }) {
return this.http return this.http
.get<DataProviderGhostfolioAssetProfileResponse>( .get<DataProviderGhostfolioAssetProfileResponse>(
`/api/v1/data-providers/ghostfolio/asset-profile/${symbol}`, `/api/v1/data-providers/ghostfolio/asset-profile/${encodeURIComponent(symbol)}`,
{ headers: this.getHeaders() } { headers: this.getHeaders() }
) )
.pipe(this.catchFetchFailure(), takeUntilDestroyed(this.destroyRef)); .pipe(this.catchFetchFailure(), takeUntilDestroyed(this.destroyRef));
@ -107,7 +107,7 @@ export class GfApiPageComponent implements OnInit {
return this.http return this.http
.get<DividendsResponse>( .get<DividendsResponse>(
`/api/v2/data-providers/ghostfolio/dividends/${symbol}`, `/api/v2/data-providers/ghostfolio/dividends/${encodeURIComponent(symbol)}`,
{ {
params, params,
headers: this.getHeaders() headers: this.getHeaders()
@ -129,7 +129,7 @@ export class GfApiPageComponent implements OnInit {
return this.http return this.http
.get<HistoricalResponse>( .get<HistoricalResponse>(
`/api/v2/data-providers/ghostfolio/historical/${symbol}`, `/api/v2/data-providers/ghostfolio/historical/${encodeURIComponent(symbol)}`,
{ {
params, params,
headers: this.getHeaders() headers: this.getHeaders()

8
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html

@ -164,12 +164,14 @@
@for (message of errorMessages; track message; let i = $index) { @for (message of errorMessages; track message; let i = $index) {
<mat-expansion-panel [disabled]="!details[i]"> <mat-expansion-panel [disabled]="!details[i]">
<mat-expansion-panel-header class="pl-1"> <mat-expansion-panel-header class="pl-1">
<mat-panel-title> <mat-panel-title class="w-100">
<div class="d-flex"> <div class="d-flex w-100">
<div class="align-items-center d-flex mr-2"> <div class="align-items-center d-flex mr-2">
<ion-icon name="warning-outline" /> <ion-icon name="warning-outline" />
</div> </div>
<div>{{ message }}</div> <div class="text-truncate" title="{{ message }}">
{{ message }}
</div>
</div> </div>
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>

11
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss

@ -1,3 +1,5 @@
@use '@angular/material' as mat;
:host { :host {
display: block; display: block;
@ -41,8 +43,13 @@
} }
.mat-expansion-panel { .mat-expansion-panel {
background: none; @include mat.expansion-overrides(
box-shadow: none; (
container-background-color: transparent,
container-elevation-shadow: none,
container-shape: 0
)
);
.mat-expansion-panel-header { .mat-expansion-panel-header {
color: inherit; color: inherit;

299
apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts

@ -12,7 +12,7 @@ import {
User User
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { Market, MarketAdvanced } from '@ghostfolio/common/types'; import { MarketAdvanced } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n'; import { translate } from '@ghostfolio/ui/i18n';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
@ -24,7 +24,9 @@ import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart';
import { import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
computed,
DestroyRef, DestroyRef,
inject,
OnInit OnInit
} from '@angular/core'; } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@ -41,6 +43,9 @@ import {
} from '@prisma/client'; } from '@prisma/client';
import { isNumber } from 'lodash'; import { isNumber } from 'lodash';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
import { filter, switchMap, tap } from 'rxjs';
import { AllocationsPageParams } from './interfaces/interfaces';
@Component({ @Component({
imports: [ imports: [
@ -57,21 +62,23 @@ import { DeviceDetectorService } from 'ngx-device-detector';
templateUrl: './allocations-page.html' templateUrl: './allocations-page.html'
}) })
export class GfAllocationsPageComponent implements OnInit { export class GfAllocationsPageComponent implements OnInit {
public accounts: { protected accounts: {
[id: string]: Pick<Account, 'name'> & { [id: string]: Pick<Account, 'name'> & {
id: string; id: string;
value: number; value: number;
}; };
}; };
public continents: { protected continents: {
[code: string]: { name: string; value: number }; [code: string]: { name: string; value: number };
}; };
public countries: { protected countries: {
[code: string]: { name: string; value: number }; [code: string]: { name: string; value: number };
}; };
public deviceType: string; protected readonly deviceType = computed(
public hasImpersonationId: boolean; () => this.deviceDetectorService.deviceInfo().deviceType
public holdings: { );
protected hasImpersonationId: boolean;
protected holdings: {
[symbol: string]: Pick< [symbol: string]: Pick<
PortfolioPosition['assetProfile'], PortfolioPosition['assetProfile'],
| 'assetClass' | 'assetClass'
@ -82,28 +89,26 @@ export class GfAllocationsPageComponent implements OnInit {
| 'name' | 'name'
> & { etfProvider: string; exchange?: string; value: number }; > & { etfProvider: string; exchange?: string; value: number };
}; };
public isLoading = false; protected isLoading = false;
public markets: { protected markets: PortfolioDetails['markets'];
[key in Market]: { id: Market; valueInPercentage: number }; protected marketsAdvanced: {
};
public marketsAdvanced: {
[key in MarketAdvanced]: { [key in MarketAdvanced]: {
id: MarketAdvanced; id: MarketAdvanced;
name: string; name: string;
value: number; value: number;
}; };
}; };
public platforms: { protected platforms: {
[id: string]: Pick<Platform, 'name'> & { [id: string]: Pick<Platform, 'name'> & {
id: string; id: string;
value: number; value: number;
}; };
}; };
public portfolioDetails: PortfolioDetails; protected portfolioDetails: PortfolioDetails;
public sectors: { protected sectors: {
[name: string]: { name: string; value: number }; [name: string]: { name: string; value: number };
}; };
public symbols: { protected symbols: {
[name: string]: { [name: string]: {
dataSource?: DataSource; dataSource?: DataSource;
name: string; name: string;
@ -111,38 +116,46 @@ export class GfAllocationsPageComponent implements OnInit {
value: number; value: number;
}; };
}; };
public topHoldings: HoldingWithParents[]; protected topHoldings: HoldingWithParents[];
public topHoldingsMap: { protected readonly UNKNOWN_KEY = UNKNOWN_KEY;
protected user: User;
private topHoldingsMap: {
[name: string]: { name: string; value: number }; [name: string]: { name: string; value: number };
}; };
public totalValueInEtf = 0; private totalValueInEtf = 0;
public UNKNOWN_KEY = UNKNOWN_KEY;
public user: User; private readonly changeDetectorRef = inject(ChangeDetectorRef);
public worldMapChartFormat: string; private readonly dataService = inject(DataService);
private readonly destroyRef = inject(DestroyRef);
public constructor( private readonly deviceDetectorService = inject(DeviceDetectorService);
private changeDetectorRef: ChangeDetectorRef, private readonly dialog = inject(MatDialog);
private dataService: DataService, private readonly impersonationStorageService = inject(
private destroyRef: DestroyRef, ImpersonationStorageService
private deviceDetectorService: DeviceDetectorService, );
private dialog: MatDialog, private readonly route = inject(ActivatedRoute);
private impersonationStorageService: ImpersonationStorageService, private readonly router = inject(Router);
private route: ActivatedRoute, private readonly userService = inject(UserService);
private router: Router,
private userService: UserService public constructor() {
) {
this.route.queryParams this.route.queryParams
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((params) => { .subscribe(
if (params['accountId'] && params['accountDetailDialog']) { ({ accountId, accountDetailDialog }: AllocationsPageParams) => {
this.openAccountDetailDialog(params['accountId']); if (accountId && accountDetailDialog) {
this.openAccountDetailDialog(accountId);
} }
}); }
);
} }
public ngOnInit() { protected get worldMapChartFormat(): string {
this.deviceType = this.deviceDetectorService.getDeviceInfo().deviceType; return this.showValuesInPercentage()
? '{0}%'
: `{0} ${this.user?.settings?.baseCurrency}`;
}
public ngOnInit() {
this.impersonationStorageService this.impersonationStorageService
.onChangeHasImpersonation() .onChangeHasImpersonation()
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
@ -151,21 +164,20 @@ export class GfAllocationsPageComponent implements OnInit {
}); });
this.userService.stateChanged this.userService.stateChanged
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(
.subscribe((state) => { filter((state) => !!state?.user),
if (state?.user) { tap((state) => {
this.user = state.user; this.user = state.user;
this.worldMapChartFormat = this.showValuesInPercentage()
? `{0}%`
: `{0} ${this.user?.settings?.baseCurrency}`;
this.isLoading = true; this.isLoading = true;
this.initialize(); this.initialize();
this.fetchPortfolioDetails() this.changeDetectorRef.markForCheck();
.pipe(takeUntilDestroyed(this.destroyRef)) }),
switchMap(() => this.fetchPortfolioDetails()),
takeUntilDestroyed(this.destroyRef)
)
.subscribe((portfolioDetails) => { .subscribe((portfolioDetails) => {
this.initialize(); this.initialize();
@ -178,29 +190,32 @@ export class GfAllocationsPageComponent implements OnInit {
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });
this.changeDetectorRef.markForCheck();
}
});
this.initialize(); this.initialize();
} }
public onAccountChartClicked({ accountId }: { accountId: string }) { protected onAccountChartClicked({ accountId }: { accountId: string }) {
if (accountId && accountId !== UNKNOWN_KEY) { if (accountId && accountId !== UNKNOWN_KEY) {
this.router.navigate([], { void this.router.navigate([], {
queryParams: { accountId, accountDetailDialog: true } queryParams: { accountId, accountDetailDialog: true }
}); });
} }
} }
public onSymbolChartClicked({ dataSource, symbol }: AssetProfileIdentifier) { protected onSymbolChartClicked({
dataSource,
symbol
}: AssetProfileIdentifier) {
if (dataSource && symbol) { if (dataSource && symbol) {
this.router.navigate([], { void this.router.navigate([], {
queryParams: { dataSource, symbol, holdingDetailDialog: true } queryParams: { dataSource, symbol, holdingDetailDialog: true }
}); });
} }
} }
protected showValuesInPercentage() {
return this.hasImpersonationId || this.user?.settings?.isRestrictedView;
}
private extractCurrency({ private extractCurrency({
assetClass, assetClass,
assetSubClass, assetSubClass,
@ -226,9 +241,9 @@ export class GfAllocationsPageComponent implements OnInit {
name name
}: { }: {
assetSubClass: PortfolioPosition['assetProfile']['assetSubClass']; assetSubClass: PortfolioPosition['assetProfile']['assetSubClass'];
name: string; name?: string;
}) { }) {
if (assetSubClass === 'ETF') { if (assetSubClass === 'ETF' && name) {
const [firstWord] = name.split(' '); const [firstWord] = name.split(' ');
return firstWord; return firstWord;
} }
@ -298,7 +313,7 @@ export class GfAllocationsPageComponent implements OnInit {
this.platforms = {}; this.platforms = {};
this.portfolioDetails = { this.portfolioDetails = {
accounts: {}, accounts: {},
createdAt: undefined, createdAt: new Date(),
holdings: {}, holdings: {},
platforms: {}, platforms: {},
summary: undefined summary: undefined
@ -327,7 +342,7 @@ export class GfAllocationsPageComponent implements OnInit {
let value = 0; let value = 0;
if (this.showValuesInPercentage()) { if (this.showValuesInPercentage()) {
value = valueInPercentage; value = valueInPercentage ?? 0;
} else { } else {
value = valueInBaseCurrency; value = valueInBaseCurrency;
} }
@ -342,30 +357,24 @@ export class GfAllocationsPageComponent implements OnInit {
for (const [symbol, position] of Object.entries( for (const [symbol, position] of Object.entries(
this.portfolioDetails.holdings this.portfolioDetails.holdings
)) { )) {
let value = 0;
if (this.showValuesInPercentage()) {
value = position.allocationInPercentage;
} else {
value = position.valueInBaseCurrency;
}
this.holdings[symbol] = { this.holdings[symbol] = {
value,
assetClass: assetClass:
position.assetProfile.assetClass || (UNKNOWN_KEY as AssetClass), position.assetProfile.assetClass || (UNKNOWN_KEY as AssetClass),
assetClassLabel: position.assetProfile.assetClassLabel || UNKNOWN_KEY, assetClassLabel: position.assetProfile.assetClassLabel ?? UNKNOWN_KEY,
assetSubClass: assetSubClass:
position.assetProfile.assetSubClass || (UNKNOWN_KEY as AssetSubClass), position.assetProfile.assetSubClass || (UNKNOWN_KEY as AssetSubClass),
assetSubClassLabel: assetSubClassLabel:
position.assetProfile.assetSubClassLabel || UNKNOWN_KEY, position.assetProfile.assetSubClassLabel ?? UNKNOWN_KEY,
currency: this.extractCurrency(position.assetProfile), currency: this.extractCurrency(position.assetProfile),
etfProvider: this.extractEtfProvider({ etfProvider: this.extractEtfProvider({
assetSubClass: position.assetProfile.assetSubClass, assetSubClass: position.assetProfile.assetSubClass,
name: position.assetProfile.name name: position.assetProfile.name
}), }),
exchange: position.exchange, exchange: position.exchange,
name: position.assetProfile.name name: position.assetProfile.name,
value: this.showValuesInPercentage()
? position.allocationInPercentage
: (position.valueInBaseCurrency ?? 0)
}; };
// Prepare analysis data by continents, countries, holdings and sectors // Prepare analysis data by continents, countries, holdings and sectors
@ -373,53 +382,50 @@ export class GfAllocationsPageComponent implements OnInit {
if (position.assetProfile.countries.length > 0) { if (position.assetProfile.countries.length > 0) {
for (const country of position.assetProfile.countries) { for (const country of position.assetProfile.countries) {
const { code, continent, weight } = country; const { code, continent, weight } = country;
const value =
if (this.continents[continent]?.value) {
this.continents[continent].value +=
weight *
(isNumber(position.valueInBaseCurrency) (isNumber(position.valueInBaseCurrency)
? position.valueInBaseCurrency ? position.valueInBaseCurrency
: position.valueInPercentage); : position.valueInPercentage) ?? 0;
const continentData = this.continents[continent];
if (continentData) {
continentData.value += weight * value;
} else { } else {
this.continents[continent] = { this.continents[continent] = {
name: translate(continent), name: translate(continent),
value: value: weight * value
weight *
(isNumber(position.valueInBaseCurrency)
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency
: this.portfolioDetails.holdings[symbol].valueInPercentage)
}; };
} }
if (this.countries[code]?.value) { const countryData = this.countries[code];
this.countries[code].value +=
weight * if (countryData) {
(isNumber(position.valueInBaseCurrency) countryData.value += weight * value;
? position.valueInBaseCurrency
: position.valueInPercentage);
} else { } else {
this.countries[code] = { this.countries[code] = {
name: getCountryName({ code }), name: getCountryName({ code }),
value: value: weight * value
weight *
(isNumber(position.valueInBaseCurrency)
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency
: this.portfolioDetails.holdings[symbol].valueInPercentage)
}; };
} }
} }
} else { } else {
this.continents[UNKNOWN_KEY].value += isNumber( const value =
position.valueInBaseCurrency (isNumber(position.valueInBaseCurrency)
) ? position.valueInBaseCurrency
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency : position.valueInPercentage) ?? 0;
: this.portfolioDetails.holdings[symbol].valueInPercentage;
this.countries[UNKNOWN_KEY].value += isNumber( const continentData = this.continents[UNKNOWN_KEY];
position.valueInBaseCurrency
) if (continentData) {
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency continentData.value += value;
: this.portfolioDetails.holdings[symbol].valueInPercentage; }
const countryData = this.countries[UNKNOWN_KEY];
if (countryData) {
countryData.value += value;
}
} }
if (position.assetProfile.holdings.length > 0) { if (position.assetProfile.holdings.length > 0) {
@ -429,21 +435,18 @@ export class GfAllocationsPageComponent implements OnInit {
valueInBaseCurrency valueInBaseCurrency
} of position.assetProfile.holdings) { } of position.assetProfile.holdings) {
const normalizedAssetName = this.normalizeAssetName(name); const normalizedAssetName = this.normalizeAssetName(name);
const value = isNumber(valueInBaseCurrency)
if (this.topHoldingsMap[normalizedAssetName]?.value) {
this.topHoldingsMap[normalizedAssetName].value += isNumber(
valueInBaseCurrency
)
? valueInBaseCurrency ? valueInBaseCurrency
: allocationInPercentage * : allocationInPercentage * (position.valueInPercentage ?? 0);
this.portfolioDetails.holdings[symbol].valueInPercentage;
const holdingData = this.topHoldingsMap[normalizedAssetName];
if (holdingData) {
holdingData.value += value;
} else { } else {
this.topHoldingsMap[normalizedAssetName] = { this.topHoldingsMap[normalizedAssetName] = {
name, name,
value: isNumber(valueInBaseCurrency) value
? valueInBaseCurrency
: allocationInPercentage *
this.portfolioDetails.holdings[symbol].valueInPercentage
}; };
} }
} }
@ -452,30 +455,33 @@ export class GfAllocationsPageComponent implements OnInit {
if (position.assetProfile.sectors.length > 0) { if (position.assetProfile.sectors.length > 0) {
for (const sector of position.assetProfile.sectors) { for (const sector of position.assetProfile.sectors) {
const { name, weight } = sector; const { name, weight } = sector;
const value =
if (this.sectors[name]?.value) {
this.sectors[name].value +=
weight *
(isNumber(position.valueInBaseCurrency) (isNumber(position.valueInBaseCurrency)
? position.valueInBaseCurrency ? position.valueInBaseCurrency
: position.valueInPercentage); : position.valueInPercentage) ?? 0;
const sectorData = this.sectors[name];
if (sectorData) {
sectorData.value += weight * value;
} else { } else {
this.sectors[name] = { this.sectors[name] = {
name: translate(name), name: translate(name),
value: value: weight * value
weight *
(isNumber(position.valueInBaseCurrency)
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency
: this.portfolioDetails.holdings[symbol].valueInPercentage)
}; };
} }
} }
} else { } else {
this.sectors[UNKNOWN_KEY].value += isNumber( const value =
position.valueInBaseCurrency (isNumber(position.valueInBaseCurrency)
) ? position.valueInBaseCurrency
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency : position.valueInPercentage) ?? 0;
: this.portfolioDetails.holdings[symbol].valueInPercentage;
const sectorData = this.sectors[UNKNOWN_KEY];
if (sectorData) {
sectorData.value += value;
}
} }
if (this.holdings[symbol].assetSubClass === 'ETF') { if (this.holdings[symbol].assetSubClass === 'ETF') {
@ -484,16 +490,18 @@ export class GfAllocationsPageComponent implements OnInit {
this.symbols[prettifySymbol(symbol)] = { this.symbols[prettifySymbol(symbol)] = {
dataSource: position.assetProfile.dataSource, dataSource: position.assetProfile.dataSource,
name: position.assetProfile.name, name: position.assetProfile.name ?? '',
symbol: prettifySymbol(symbol), symbol: prettifySymbol(symbol),
value: isNumber(position.valueInBaseCurrency) value:
(isNumber(position.valueInBaseCurrency)
? position.valueInBaseCurrency ? position.valueInBaseCurrency
: position.valueInPercentage : position.valueInPercentage) ?? 0
}; };
} }
this.markets = this.portfolioDetails.markets; this.markets = this.portfolioDetails.markets;
if (this.portfolioDetails.marketsAdvanced) {
Object.values(this.portfolioDetails.marketsAdvanced).forEach( Object.values(this.portfolioDetails.marketsAdvanced).forEach(
({ id, valueInBaseCurrency, valueInPercentage }) => { ({ id, valueInBaseCurrency, valueInPercentage }) => {
this.marketsAdvanced[id].value = isNumber(valueInBaseCurrency) this.marketsAdvanced[id].value = isNumber(valueInBaseCurrency)
@ -501,6 +509,7 @@ export class GfAllocationsPageComponent implements OnInit {
: valueInPercentage; : valueInPercentage;
} }
); );
}
for (const [ for (const [
id, id,
@ -509,7 +518,7 @@ export class GfAllocationsPageComponent implements OnInit {
let value = 0; let value = 0;
if (this.showValuesInPercentage()) { if (this.showValuesInPercentage()) {
value = valueInPercentage; value = valueInPercentage ?? 0;
} else { } else {
value = valueInBaseCurrency; value = valueInBaseCurrency;
} }
@ -522,12 +531,11 @@ export class GfAllocationsPageComponent implements OnInit {
} }
this.topHoldings = Object.values(this.topHoldingsMap) this.topHoldings = Object.values(this.topHoldingsMap)
.map(({ name, value }) => { .map(({ name, value }): HoldingWithParents => {
if (this.showValuesInPercentage()) { if (this.showValuesInPercentage()) {
return { return {
name, name,
allocationInPercentage: value, allocationInPercentage: value
valueInBaseCurrency: null
}; };
} }
@ -547,11 +555,12 @@ export class GfAllocationsPageComponent implements OnInit {
} }
); );
return currentParentHolding return currentParentHolding &&
isNumber(currentParentHolding.valueInBaseCurrency)
? { ? {
allocationInPercentage: allocationInPercentage:
currentParentHolding.valueInBaseCurrency / value, currentParentHolding.valueInBaseCurrency / value,
name: holding.assetProfile.name, name: holding.assetProfile.name ?? '',
position: holding, position: holding,
symbol: prettifySymbol(symbol), symbol: prettifySymbol(symbol),
valueInBaseCurrency: valueInBaseCurrency:
@ -596,26 +605,22 @@ export class GfAllocationsPageComponent implements OnInit {
autoFocus: false, autoFocus: false,
data: { data: {
accountId: aAccountId, accountId: aAccountId,
deviceType: this.deviceType, deviceType: this.deviceType(),
hasImpersonationId: this.hasImpersonationId, hasImpersonationId: this.hasImpersonationId,
hasPermissionToCreateActivity: hasPermissionToCreateActivity:
!this.hasImpersonationId && !this.hasImpersonationId &&
hasPermission(this.user?.permissions, permissions.createActivity) && hasPermission(this.user?.permissions, permissions.createActivity) &&
!this.user?.settings?.isRestrictedView !this.user?.settings?.isRestrictedView
}, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', height: this.deviceType() === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType() === 'mobile' ? '100vw' : '50rem'
}); });
dialogRef dialogRef
.afterClosed() .afterClosed()
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => { .subscribe(() => {
this.router.navigate(['.'], { relativeTo: this.route }); void this.router.navigate(['.'], { relativeTo: this.route });
}); });
} }
public showValuesInPercentage() {
return this.hasImpersonationId || this.user?.settings?.isRestrictedView;
}
} }

2
apps/client/src/app/pages/portfolio/allocations/allocations-page.html

@ -115,7 +115,7 @@
[isInPercentage]="showValuesInPercentage()" [isInPercentage]="showValuesInPercentage()"
[keys]="['symbol']" [keys]="['symbol']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[showLabels]="deviceType !== 'mobile'" [showLabels]="deviceType() !== 'mobile'"
(proportionChartClicked)="onSymbolChartClicked($event)" (proportionChartClicked)="onSymbolChartClicked($event)"
/> />
</mat-card-content> </mat-card-content>

6
apps/client/src/app/pages/portfolio/allocations/interfaces/interfaces.ts

@ -0,0 +1,6 @@
import { Params } from '@angular/router';
export interface AllocationsPageParams extends Params {
accountDetailDialog?: string;
accountId?: string;
}

87
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts

@ -5,39 +5,30 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { translate } from '@ghostfolio/ui/i18n'; import { translate } from '@ghostfolio/ui/i18n';
import { DataService } from '@ghostfolio/ui/services'; import { DataService } from '@ghostfolio/ui/services';
import { Component, OnInit } from '@angular/core'; import {
ChangeDetectionStrategy,
Component,
computed,
inject
} from '@angular/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { ActivatedRoute, RouterModule } from '@angular/router'; import { ActivatedRoute, RouterModule } from '@angular/router';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'page' }, host: { class: 'page' },
imports: [MatButtonModule, RouterModule], imports: [MatButtonModule, RouterModule],
selector: 'gf-product-page', selector: 'gf-product-page',
styleUrls: ['./product-page.scss'], styleUrls: ['./product-page.scss'],
templateUrl: './product-page.html' templateUrl: './product-page.html'
}) })
export class GfProductPageComponent implements OnInit { export class GfProductPageComponent {
public key: string; protected readonly price = computed(() => {
public price: number;
public product1: Product;
public product2: Product;
public routerLinkAbout = publicRoutes.about.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkResourcesPersonalFinanceTools =
publicRoutes.resources.subRoutes.personalFinanceTools.routerLink;
public tags: string[];
public constructor(
private dataService: DataService,
private route: ActivatedRoute
) {}
public ngOnInit() {
const { subscriptionOffer } = this.dataService.fetchInfo(); const { subscriptionOffer } = this.dataService.fetchInfo();
return subscriptionOffer?.price;
});
this.price = subscriptionOffer?.price; protected readonly product1 = computed<Product>(() => ({
this.product1 = {
founded: 2021, founded: 2021,
hasFreePlan: true, hasFreePlan: true,
hasSelfHostingAbility: true, hasSelfHostingAbility: true,
@ -60,29 +51,48 @@ export class GfProductPageComponent implements OnInit {
regions: [$localize`Global`], regions: [$localize`Global`],
slogan: 'Open Source Wealth Management', slogan: 'Open Source Wealth Management',
useAnonymously: true useAnonymously: true
}; }));
this.product2 = { protected readonly product2 = computed<Product>(() => {
...personalFinanceTools.find(({ key }) => { const product = personalFinanceTools.find(({ key }) => {
return key === this.route.snapshot.data['key']; return key === this.route.snapshot.data['key'];
}) });
const mappedProduct = {
key: product?.key ?? '',
name: product?.name ?? '',
...product
}; };
if (this.product2.origin) { if (mappedProduct.origin) {
this.product2.origin = getCountryName({ code: this.product2.origin }); mappedProduct.origin = getCountryName({ code: mappedProduct.origin });
} }
if (this.product2.regions) { if (mappedProduct.regions) {
this.product2.regions = this.product2.regions.map((region) => { mappedProduct.regions = mappedProduct.regions.map((region) => {
return translate(region); return region === 'Global'
? translate(region)
: getCountryName({ code: region });
}); });
} }
this.tags = [ return mappedProduct;
this.product1.name, });
this.product1.origin,
this.product2.name, protected readonly routerLinkAbout = publicRoutes.about.routerLink;
this.product2.origin, protected readonly routerLinkFeatures = publicRoutes.features.routerLink;
protected readonly routerLinkResourcesPersonalFinanceTools =
publicRoutes.resources.subRoutes.personalFinanceTools.routerLink;
protected readonly tags = computed<string[]>(() => {
const product1 = this.product1();
const product2 = this.product2();
return [
product1.name,
product1.origin,
product2.name,
product2.origin,
$localize`Alternative`, $localize`Alternative`,
$localize`App`, $localize`App`,
$localize`Budgeting`, $localize`Budgeting`,
@ -103,11 +113,14 @@ export class GfProductPageComponent implements OnInit {
$localize`Wealth Management`, $localize`Wealth Management`,
`WealthTech` `WealthTech`
] ]
.filter((item) => { .filter((item): item is string => {
return !!item; return !!item;
}) })
.sort((a, b) => { .sort((a, b) => {
return a.localeCompare(b, undefined, { sensitivity: 'base' }); return a.localeCompare(b, undefined, { sensitivity: 'base' });
}); });
} });
private readonly dataService = inject(DataService);
private readonly route = inject(ActivatedRoute);
} }

116
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html

@ -6,10 +6,10 @@
<h1 class="mb-1"> <h1 class="mb-1">
<strong>Ghostfolio</strong>: <strong>Ghostfolio</strong>:
<ng-container i18n>The Open Source Alternative to</ng-container <ng-container i18n>The Open Source Alternative to</ng-container
>&nbsp;<strong>{{ product2.name }}</strong> >&nbsp;<strong>{{ product2().name }}</strong>
</h1> </h1>
</div> </div>
@if (product2.isArchived) { @if (product2().isArchived) {
<div class="info-container my-4 p-2 rounded text-center text-muted"> <div class="info-container my-4 p-2 rounded text-center text-muted">
<ng-container i18n>This page has been archived.</ng-container> <ng-container i18n>This page has been archived.</ng-container>
</div> </div>
@ -17,7 +17,7 @@
<section class="mb-4"> <section class="mb-4">
<p i18n> <p i18n>
Are you looking for an open source alternative to Are you looking for an open source alternative to
{{ product2.name }}? {{ product2().name }}?
<a [routerLink]="routerLinkAbout">Ghostfolio</a> is a powerful <a [routerLink]="routerLinkAbout">Ghostfolio</a> is a powerful
portfolio management tool that provides individuals with a portfolio management tool that provides individuals with a
comprehensive platform to track, analyze, and optimize their comprehensive platform to track, analyze, and optimize their
@ -31,7 +31,7 @@
</p> </p>
<p i18n> <p i18n>
Ghostfolio is an open source software (OSS), providing a Ghostfolio is an open source software (OSS), providing a
cost-effective alternative to {{ product2.name }} making it cost-effective alternative to {{ product2().name }} making it
particularly suitable for individuals on a tight budget, such as particularly suitable for individuals on a tight budget, such as
those those
<a href="../en/blog/2023/07/exploring-the-path-to-fire" <a href="../en/blog/2023/07/exploring-the-path-to-fire"
@ -42,9 +42,9 @@
</p> </p>
<p i18n> <p i18n>
Let’s dive deeper into the detailed Ghostfolio vs Let’s dive deeper into the detailed Ghostfolio vs
{{ product2.name }} comparison table below to gain a thorough {{ product2().name }} comparison table below to gain a thorough
understanding of how Ghostfolio positions itself relative to understanding of how Ghostfolio positions itself relative to
{{ product2.name }}. We will explore various aspects such as {{ product2().name }}. We will explore various aspects such as
features, data privacy, pricing, and more, allowing you to make a features, data privacy, pricing, and more, allowing you to make a
well-informed choice for your personal requirements. well-informed choice for your personal requirements.
</p> </p>
@ -54,7 +54,7 @@
<caption class="text-center" i18n> <caption class="text-center" i18n>
Ghostfolio vs Ghostfolio vs
{{ {{
product2.name product2().name
}} }}
comparison table comparison table
</caption> </caption>
@ -63,31 +63,31 @@
<th class="mat-mdc-header-cell px-1 py-2"></th> <th class="mat-mdc-header-cell px-1 py-2"></th>
<th class="mat-mdc-header-cell px-1 py-2">Ghostfolio</th> <th class="mat-mdc-header-cell px-1 py-2">Ghostfolio</th>
<th class="mat-mdc-header-cell px-1 py-2"> <th class="mat-mdc-header-cell px-1 py-2">
{{ product2.name }} {{ product2().name }}
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right"></td> <td class="mat-mdc-cell px-3 py-2 text-right"></td>
<td class="mat-mdc-cell px-1 py-2">{{ product1.slogan }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product1().slogan }}</td>
<td class="mat-mdc-cell px-1 py-2">{{ product2.slogan }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product2().slogan }}</td>
</tr> </tr>
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Founded</td> <td class="mat-mdc-cell px-3 py-2 text-right" i18n>Founded</td>
<td class="mat-mdc-cell px-1 py-2">{{ product1.founded }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product1().founded }}</td>
<td class="mat-mdc-cell px-1 py-2">{{ product2.founded }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product2().founded }}</td>
</tr> </tr>
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Origin</td> <td class="mat-mdc-cell px-3 py-2 text-right" i18n>Origin</td>
<td class="mat-mdc-cell px-1 py-2">{{ product1.origin }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product1().origin }}</td>
<td class="mat-mdc-cell px-1 py-2">{{ product2.origin }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product2().origin }}</td>
</tr> </tr>
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Region</td> <td class="mat-mdc-cell px-3 py-2 text-right" i18n>Region</td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@for ( @for (
region of product1.regions; region of product1().regions;
track region; track region;
let isLast = $last let isLast = $last
) { ) {
@ -96,7 +96,7 @@
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@for ( @for (
region of product2.regions; region of product2().regions;
track region; track region;
let isLast = $last let isLast = $last
) { ) {
@ -110,7 +110,7 @@
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@for ( @for (
language of product1.languages; language of product1().languages;
track language; track language;
let isLast = $last let isLast = $last
) { ) {
@ -119,7 +119,7 @@
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@for ( @for (
language of product2.languages; language of product2().languages;
track language; track language;
let isLast = $last let isLast = $last
) { ) {
@ -132,35 +132,35 @@
Open Source Software Open Source Software
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product1.isOpenSource) { @if (product1().isOpenSource) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} is Open Source Software" title="{{ product1().name }} is Open Source Software"
>✅ Yes</span >✅ Yes</span
> >
} @else { } @else {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} is not Open Source Software" title="{{ product1().name }} is not Open Source Software"
>❌ No</span >❌ No</span
> >
} }
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product2.isOpenSource) { @if (product2().isOpenSource) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} is Open Source Software" title="{{ product2().name }} is Open Source Software"
>✅ Yes</span >✅ Yes</span
> >
} @else { } @else {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} is not Open Source Software" title="{{ product2().name }} is not Open Source Software"
>❌ No</span >❌ No</span
> >
} }
@ -171,35 +171,35 @@
Self-Hosting Self-Hosting
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product1.hasSelfHostingAbility === true) { @if (product1().hasSelfHostingAbility === true) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} can be self-hosted" title="{{ product1().name }} can be self-hosted"
>✅ Yes</span >✅ Yes</span
> >
} @else if (product1.hasSelfHostingAbility === false) { } @else if (product1().hasSelfHostingAbility === false) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} cannot be self-hosted" title="{{ product1().name }} cannot be self-hosted"
>❌ No</span >❌ No</span
> >
} }
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product2.hasSelfHostingAbility === true) { @if (product2().hasSelfHostingAbility === true) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} can be self-hosted" title="{{ product2().name }} can be self-hosted"
>✅ Yes</span >✅ Yes</span
> >
} @else if (product2.hasSelfHostingAbility === false) { } @else if (product2().hasSelfHostingAbility === false) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} cannot be self-hosted" title="{{ product2().name }} cannot be self-hosted"
>❌ No</span >❌ No</span
> >
} }
@ -210,35 +210,35 @@
Use anonymously Use anonymously
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product1.useAnonymously === true) { @if (product1().useAnonymously === true) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} can be used anonymously" title="{{ product1().name }} can be used anonymously"
>✅ Yes</span >✅ Yes</span
> >
} @else if (product1.useAnonymously === false) { } @else if (product1().useAnonymously === false) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} cannot be used anonymously" title="{{ product1().name }} cannot be used anonymously"
>❌ No</span >❌ No</span
> >
} }
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product2.useAnonymously === true) { @if (product2().useAnonymously === true) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} can be used anonymously" title="{{ product2().name }} can be used anonymously"
>✅ Yes</span >✅ Yes</span
> >
} @else if (product2.useAnonymously === false) { } @else if (product2().useAnonymously === false) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} cannot be used anonymously" title="{{ product2().name }} cannot be used anonymously"
>❌ No</span >❌ No</span
> >
} }
@ -249,35 +249,35 @@
Free Plan Free Plan
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product1.hasFreePlan === true) { @if (product1().hasFreePlan === true) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} offers a free plan" title="{{ product1().name }} offers a free plan"
>✅ Yes</span >✅ Yes</span
> >
} @else if (product1.hasFreePlan === false) { } @else if (product1().hasFreePlan === false) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product1.name }} does not offer a free plan" title="{{ product1().name }} does not offer a free plan"
>❌ No</span >❌ No</span
> >
} }
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product2.hasFreePlan === true) { @if (product2().hasFreePlan === true) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} offers a free plan" title="{{ product2().name }} offers a free plan"
>✅ Yes</span >✅ Yes</span
> >
} @else if (product2.hasFreePlan === false) { } @else if (product2().hasFreePlan === false) {
<span <span
i18n i18n
i18n-title i18n-title
title="{{ product2.name }} does not offer a free plan" title="{{ product2().name }} does not offer a free plan"
>❌ No</span >❌ No</span
> >
} }
@ -286,22 +286,22 @@
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Pricing</td> <td class="mat-mdc-cell px-3 py-2 text-right" i18n>Pricing</td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
<span i18n>Starting from</span> ${{ price }} / <span i18n>Starting from</span> ${{ price() }} /
<span i18n>year</span> <span i18n>year</span>
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
@if (product2.pricingPerYear) { @if (product2().pricingPerYear) {
<span i18n>Starting from</span> <span i18n>Starting from</span>
{{ product2.pricingPerYear }} / {{ product2().pricingPerYear }} /
<span i18n>year</span> <span i18n>year</span>
} }
</td> </td>
</tr> </tr>
@if (product1.note || product2.note) { @if (product1().note || product2().note) {
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Notes</td> <td class="mat-mdc-cell px-3 py-2 text-right" i18n>Notes</td>
<td class="mat-mdc-cell px-1 py-2">{{ product1.note }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product1().note }}</td>
<td class="mat-mdc-cell px-1 py-2">{{ product2.note }}</td> <td class="mat-mdc-cell px-1 py-2">{{ product2().note }}</td>
</tr> </tr>
} }
</tbody> </tbody>
@ -310,9 +310,9 @@
<section class="mb-4"> <section class="mb-4">
<p i18n> <p i18n>
Please note that the information provided in the Ghostfolio vs Please note that the information provided in the Ghostfolio vs
{{ product2.name }} comparison table is based on our independent {{ product2().name }} comparison table is based on our independent
research and analysis. This website is not affiliated with research and analysis. This website is not affiliated with
{{ product2.name }} or any other product mentioned in the {{ product2().name }} or any other product mentioned in the
comparison. As the landscape of personal finance tools evolves, it comparison. As the landscape of personal finance tools evolves, it
is essential to verify any specific details or changes directly from is essential to verify any specific details or changes directly from
the respective product page. Data needs a refresh? Help us maintain the respective product page. Data needs a refresh? Help us maintain
@ -337,7 +337,7 @@
</section> </section>
<section class="mb-4"> <section class="mb-4">
<ul class="list-inline"> <ul class="list-inline">
@for (tag of tags; track tag) { @for (tag of tags(); track tag) {
<li class="list-inline-item"> <li class="list-inline-item">
<span class="badge badge-light">{{ tag }}</span> <span class="badge badge-light">{{ tag }}</span>
</li> </li>
@ -355,7 +355,7 @@
aria-current="page" aria-current="page"
class="active breadcrumb-item text-truncate" class="active breadcrumb-item text-truncate"
> >
Ghostfolio vs {{ product2.name }} Ghostfolio vs {{ product2().name }}
</li> </li>
</ol> </ol>
</nav> </nav>

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

@ -607,7 +607,7 @@
<target state="translated">Suprimir</target> <target state="translated">Suprimir</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -659,7 +659,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8650499415827640724" datatype="html"> <trans-unit id="8650499415827640724" datatype="html">
@ -707,7 +707,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -757,10 +757,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -946,6 +942,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Nombre d’Activitats</target> <target state="translated">Nombre d’Activitats</target>
@ -974,6 +978,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Nombre de Països</target> <target state="translated">Nombre de Països</target>
@ -1027,7 +1039,7 @@
<target state="translated">El preu de mercat actual és</target> <target state="translated">El preu de mercat actual és</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1102717806459547726" datatype="html"> <trans-unit id="1102717806459547726" datatype="html">
@ -1159,7 +1171,7 @@
<target state="translated">Configuració del Proveïdor de Dades</target> <target state="translated">Configuració del Proveïdor de Dades</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -1167,7 +1179,7 @@
<target state="translated">Prova</target> <target state="translated">Prova</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8308045076391224954" datatype="html"> <trans-unit id="8308045076391224954" datatype="html">
@ -1179,7 +1191,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1195,7 +1207,7 @@
<target state="new">Asset profile has been saved</target> <target state="new">Asset profile has been saved</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1351,7 +1363,7 @@
<target state="translated">Recollida de Dades</target> <target state="translated">Recollida de Dades</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -1463,7 +1475,7 @@
<target state="new">Current year</target> <target state="new">Current year</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1603,11 +1615,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1643,7 +1655,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1983,7 +1995,7 @@
<target state="new">Current week</target> <target state="new">Current week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2407,7 +2419,7 @@
<target state="translated">YTD</target> <target state="translated">YTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2419,7 +2431,7 @@
<target state="translated">1 any</target> <target state="translated">1 any</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2431,7 +2443,7 @@
<target state="translated">5 anys</target> <target state="translated">5 anys</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2451,7 +2463,7 @@
<target state="translated">Màx</target> <target state="translated">Màx</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2679,7 +2691,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -2703,7 +2715,7 @@
<target state="translated">Localització</target> <target state="translated">Localització</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -2886,6 +2898,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Ups! Sembla que esteu fent massa sol·licituds. Si us plau, aneu una mica més lent.</target> <target state="translated">Ups! Sembla que esteu fent massa sol·licituds. Si us plau, aneu una mica més lent.</target>
@ -3315,11 +3335,11 @@
<target state="new">Could not parse scraper configuration</target> <target state="new">Could not parse scraper configuration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -3547,6 +3567,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<target state="translated">Explotacions</target> <target state="translated">Explotacions</target>
@ -4239,14 +4267,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Activitats d’importació</target> <target state="translated">Activitats d’importació</target>
@ -4496,7 +4516,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -4668,7 +4688,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -4695,14 +4715,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="1600023202562292052" datatype="html"> <trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source> <source>Close Holding</source>
<target state="new">Close Holding</target> <target state="new">Close Holding</target>
@ -4879,6 +4891,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Transaccions il·limitades</target> <target state="translated">Transaccions il·limitades</target>
@ -4983,6 +5003,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<target state="translated">Suport per correu electrònic i xat</target> <target state="translated">Suport per correu electrònic i xat</target>
@ -5004,11 +5032,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -5153,7 +5181,7 @@
<target state="translated">Global</target> <target state="translated">Global</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5169,24 +5197,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Estàs buscant una alternativa de codi obert a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> és una potent eina de gestió de portafolis que proporciona a les persones una plataforma completa per fer el seguiment, analitzar i optimitzar les seves inversions. Tant si ets un inversor amb experiència com si tot just comences, Ghostfolio ofereix una interfície intuïtiva i una <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>àmplia gamma de funcionalitats<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> per ajudar-te a prendre decisions informades i a prendre el control del teu futur financer.</target> <target state="translated">Estàs buscant una alternativa de codi obert a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> és una potent eina de gestió de portafolis que proporciona a les persones una plataforma completa per fer el seguiment, analitzar i optimitzar les seves inversions. Tant si ets un inversor amb experiència com si tot just comences, Ghostfolio ofereix una interfície intuïtiva i una <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>àmplia gamma de funcionalitats<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> per ajudar-te a prendre decisions informades i a prendre el control del teu futur financer.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio és un programari de codi obert (OSS), que proporciona una alternativa rendible a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>, especialment adequada per a persones amb un pressupost ajustat, com ara aquelles que <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>segueixen el camí cap a la independència financera i jubilació anticipada (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Mitjançant els esforços col·lectius d’una comunitat de desenvolupadors i apassionats de les finances personals, Ghostfolio millora contínuament les seves capacitats, la seva seguretat i l’experiència d’usuari.</target> <target state="translated">Ghostfolio és un programari de codi obert (OSS), que proporciona una alternativa rendible a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>, especialment adequada per a persones amb un pressupost ajustat, com ara aquelles que <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>segueixen el camí cap a la independència financera i jubilació anticipada (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Mitjançant els esforços col·lectius d’una comunitat de desenvolupadors i apassionats de les finances personals, Ghostfolio millora contínuament les seves capacitats, la seva seguretat i l’experiència d’usuari.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Explorem en profunditat la taula comparativa detallada de Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> que trobaràs a continuació per entendre a fons com es posiciona Ghostfolio en relació amb <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Analitzarem diversos aspectes com ara funcionalitats, privadesa de dades, preus i molt més, per tal que puguis prendre una decisió ben informada segons les teves necessitats personals.</target> <target state="translated">Explorem en profunditat la taula comparativa detallada de Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> que trobaràs a continuació per entendre a fons com es posiciona Ghostfolio en relació amb <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Analitzarem diversos aspectes com ara funcionalitats, privadesa de dades, preus i molt més, per tal que puguis prendre una decisió ben informada segons les teves necessitats personals.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5205,8 +5233,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Taula comparativa Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/></target> <target state="translated">Taula comparativa Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5369,8 +5397,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Tingues en compte que la informació proporcionada a la taula comparativa Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> es basa en la nostra investigació i anàlisi independents. Aquest lloc web no està afiliat a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> ni a cap altre producte esmentat en la comparació. A mesura que evoluciona el panorama de les eines de finances personals, és essencial verificar qualsevol detall o canvi específic directament a la pàgina del producte corresponent. Necessites actualitzar dades? Ajuda’ns a mantenir la informació precisa a <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Tingues en compte que la informació proporcionada a la taula comparativa Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> es basa en la nostra investigació i anàlisi independents. Aquest lloc web no està afiliat a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> ni a cap altre producte esmentat en la comparació. A mesura que evoluciona el panorama de les eines de finances personals, és essencial verificar qualsevol detall o canvi específic directament a la pàgina del producte corresponent. Necessites actualitzar dades? Ajuda’ns a mantenir la informació precisa a <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5577,7 +5605,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -5597,7 +5625,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -5617,7 +5645,7 @@
<target state="translated">any</target> <target state="translated">any</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -5637,7 +5665,7 @@
<target state="translated">anys</target> <target state="translated">anys</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6509,7 +6537,7 @@
<target state="translated">Alternativa</target> <target state="translated">Alternativa</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6517,7 +6545,7 @@
<target state="translated">Aplicació</target> <target state="translated">Aplicació</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6525,7 +6553,7 @@
<target state="translated">Pressupost</target> <target state="translated">Pressupost</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6585,7 +6613,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6601,7 +6629,7 @@
<target state="translated">Oficina familiar</target> <target state="translated">Oficina familiar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6609,7 +6637,7 @@
<target state="new">Investor</target> <target state="new">Investor</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6621,7 +6649,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6633,7 +6661,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6641,7 +6669,7 @@
<target state="new">Privacy</target> <target state="new">Privacy</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6649,7 +6677,7 @@
<target state="new">Software</target> <target state="new">Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6657,7 +6685,7 @@
<target state="new">Tool</target> <target state="new">Tool</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6665,7 +6693,7 @@
<target state="new">User Experience</target> <target state="new">User Experience</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6673,7 +6701,7 @@
<target state="new">Wealth</target> <target state="new">Wealth</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6681,7 +6709,7 @@
<target state="new">Wealth Management</target> <target state="new">Wealth Management</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6705,7 +6733,7 @@
<target state="new">Error</target> <target state="new">Error</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6757,7 +6785,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6809,7 +6837,7 @@
<target state="new">Close</target> <target state="new">Close</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6837,7 +6865,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6985,8 +7013,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6997,8 +7025,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7033,8 +7061,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7053,8 +7081,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7065,8 +7093,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="new"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7355,7 +7383,7 @@
<target state="new">Save</target> <target state="new">Save</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="new">Lazy</target> <target state="new">Lazy</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="new">Instant</target> <target state="new">Instant</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="new">Default Market Price</target> <target state="new">Default Market Price</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="new">Mode</target> <target state="new">Mode</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="new">Selector</target> <target state="new">Selector</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="new">HTTP Request Headers</target> <target state="new">HTTP Request Headers</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="new">end of day</target> <target state="new">end of day</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="new">real-time</target> <target state="new">real-time</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target> <target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="new">Current month</target> <target state="new">Current month</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -262,7 +262,7 @@
<target state="translated">Löschen</target> <target state="translated">Löschen</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -314,7 +314,7 @@
<target state="translated">Bezahlt</target> <target state="translated">Bezahlt</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1089827441260039381" datatype="html"> <trans-unit id="1089827441260039381" datatype="html">
@ -364,10 +364,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -418,7 +414,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -761,6 +757,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="translated">Erstellung</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="5207635742003539443" datatype="html"> <trans-unit id="5207635742003539443" datatype="html">
<source>Sign in</source> <source>Sign in</source>
<target state="translated">Einloggen</target> <target state="translated">Einloggen</target>
@ -1102,7 +1106,7 @@
<target state="translated">YTD</target> <target state="translated">YTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1114,7 +1118,7 @@
<target state="translated">1J</target> <target state="translated">1J</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1126,7 +1130,7 @@
<target state="translated">5J</target> <target state="translated">5J</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1146,7 +1150,7 @@
<target state="translated">Max</target> <target state="translated">Max</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1334,7 +1338,7 @@
<target state="translated">Gutschein</target> <target state="translated">Gutschein</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6780407325174304229" datatype="html"> <trans-unit id="6780407325174304229" datatype="html">
@ -1342,7 +1346,7 @@
<target state="translated">Lokalität</target> <target state="translated">Lokalität</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -1902,7 +1906,7 @@
<target state="translated">Testphase</target> <target state="translated">Testphase</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2948175671993825247" datatype="html"> <trans-unit id="2948175671993825247" datatype="html">
@ -1998,7 +2002,7 @@
<target state="translated">Aktuelle Woche</target> <target state="translated">Aktuelle Woche</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2226,7 +2230,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -2345,14 +2349,6 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="translated">Abonnements</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Aktivitäten importieren</target> <target state="translated">Aktivitäten importieren</target>
@ -2689,6 +2685,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="translated">Verlauf der Mitgliedschaft</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="5486880308148746399" datatype="html"> <trans-unit id="5486880308148746399" datatype="html">
<source>Fear</source> <source>Fear</source>
<target state="translated">Angst</target> <target state="translated">Angst</target>
@ -2762,11 +2766,11 @@
<target state="translated">Das Formular konnte nicht validiert werden</target> <target state="translated">Das Formular konnte nicht validiert werden</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -3233,6 +3237,14 @@
<context context-type="linenumber">166</context> <context context-type="linenumber">166</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="translated">Häufigkeit der Datensynchronisierung</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Anzahl Aktivitäten</target> <target state="translated">Anzahl Aktivitäten</target>
@ -3429,14 +3441,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="translated">Läuft ab</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html"> <trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source> <source>Import Dividends</source>
<target state="translated">Dividenden importieren</target> <target state="translated">Dividenden importieren</target>
@ -3681,6 +3685,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="translated">Stündlich</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Unlimitierte Transaktionen</target> <target state="translated">Unlimitierte Transaktionen</target>
@ -3765,6 +3777,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="translated">Ablauf</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="7478722592449005806" datatype="html"> <trans-unit id="7478722592449005806" datatype="html">
<source>One-time payment, no auto-renewal.</source> <source>One-time payment, no auto-renewal.</source>
<target state="translated">Einmalige Zahlung, keine automatische Erneuerung.</target> <target state="translated">Einmalige Zahlung, keine automatische Erneuerung.</target>
@ -3778,11 +3798,11 @@
<target state="translated">Das Anlageprofil konnte nicht gespeichert werden</target> <target state="translated">Das Anlageprofil konnte nicht gespeichert werden</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -4014,7 +4034,7 @@
<target state="translated">Aktuelles Jahr</target> <target state="translated">Aktuelles Jahr</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -4034,7 +4054,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -4050,7 +4070,7 @@
<target state="translated">Das Anlageprofil wurde gespeichert</target> <target state="translated">Das Anlageprofil wurde gespeichert</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -4426,7 +4446,7 @@
<target state="translated">Scraper Konfiguration</target> <target state="translated">Scraper Konfiguration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7504169991280318133" datatype="html"> <trans-unit id="7504169991280318133" datatype="html">
@ -4958,11 +4978,11 @@
<target state="translated">Die Scraper Konfiguration konnte nicht geparsed werden</target> <target state="translated">Die Scraper Konfiguration konnte nicht geparsed werden</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -5475,24 +5495,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Suchst du nach einer Open Source Alternative zu <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> ist ein leistungsstarkes Portfolio Management Tool, das Privatpersonen eine umfassende Plattform bietet, um ihre Investitionen zu verfolgen, zu analysieren und zu optimieren. Egal, ob du ein erfahrener Investor bist oder gerade erst anfängst, Ghostfolio bietet eine intuitive Benutzeroberfläche und eine <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>Vielzahl an Funktionen<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>, die dir dabei helfen, fundierte Entscheidungen zu treffen und die Kontrolle über deine finanzielle Zukunft zu übernehmen.</target> <target state="translated">Suchst du nach einer Open Source Alternative zu <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> ist ein leistungsstarkes Portfolio Management Tool, das Privatpersonen eine umfassende Plattform bietet, um ihre Investitionen zu verfolgen, zu analysieren und zu optimieren. Egal, ob du ein erfahrener Investor bist oder gerade erst anfängst, Ghostfolio bietet eine intuitive Benutzeroberfläche und eine <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>Vielzahl an Funktionen<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>, die dir dabei helfen, fundierte Entscheidungen zu treffen und die Kontrolle über deine finanzielle Zukunft zu übernehmen.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio ist eine Open Source Software (OSS), die eine kostengünstige Alternative zu <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> darstellt und sich besonders für Personen mit knappem Budget eignet, wie z.B. für diejenigen, die <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>finanzielle Unabhängigkeit und einen frühen Ruhestand anstreben (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Ghostfolio nutzt die gemeinsamen Aktivitäten einer Community von Entwicklern und Finanzenthusiasten, um seine Funktionalität, Sicherheit und Benutzerfreundlichkeit kontinuierlich zu verbessern.</target> <target state="translated">Ghostfolio ist eine Open Source Software (OSS), die eine kostengünstige Alternative zu <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> darstellt und sich besonders für Personen mit knappem Budget eignet, wie z.B. für diejenigen, die <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>finanzielle Unabhängigkeit und einen frühen Ruhestand anstreben (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Ghostfolio nutzt die gemeinsamen Aktivitäten einer Community von Entwicklern und Finanzenthusiasten, um seine Funktionalität, Sicherheit und Benutzerfreundlichkeit kontinuierlich zu verbessern.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Wir möchten uns in der untenstehenden Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> Vergleichstabelle ein detailliertes Bild davon machen, wie Ghostfolio im Vergleich zu <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> positioniert ist. Wir werden dabei verschiedene Aspekte wie Funktionen, Datenschutz, Preise und weiteres untersuchen, damit du eine gut informierte Entscheidung für deine persönlichen Anforderungen treffen kannst.</target> <target state="translated">Wir möchten uns in der untenstehenden Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> Vergleichstabelle ein detailliertes Bild davon machen, wie Ghostfolio im Vergleich zu <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> positioniert ist. Wir werden dabei verschiedene Aspekte wie Funktionen, Datenschutz, Preise und weiteres untersuchen, damit du eine gut informierte Entscheidung für deine persönlichen Anforderungen treffen kannst.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5512,8 +5532,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Bitte beachte, dass die bereitgestellten Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> Informationen auf unserer unabhängigen Recherche und Analyse beruhen. Diese Webseite steht in keiner Verbindung zu <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> oder einem anderen im Vergleich erwähnten Produkt. Da sich die Landschaft der Personal Finance Tools ständig weiterentwickelt, ist es wichtig, alle spezifischen Details oder Änderungen direkt auf der jeweiligen Produktseite zu überprüfen. Brauchen die Daten eine Auffrischung? Unterstütze uns bei der Pflege der aktuellen Daten auf <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Bitte beachte, dass die bereitgestellten Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> Informationen auf unserer unabhängigen Recherche und Analyse beruhen. Diese Webseite steht in keiner Verbindung zu <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> oder einem anderen im Vergleich erwähnten Produkt. Da sich die Landschaft der Personal Finance Tools ständig weiterentwickelt, ist es wichtig, alle spezifischen Details oder Änderungen direkt auf der jeweiligen Produktseite zu überprüfen. Brauchen die Daten eine Auffrischung? Unterstütze uns bei der Pflege der aktuellen Daten auf <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5532,7 +5552,7 @@
<target state="translated">Weltweit</target> <target state="translated">Weltweit</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5836,8 +5856,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> Vergleichstabelle</target> <target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> Vergleichstabelle</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5972,7 +5992,7 @@
<target state="translated">Der aktuelle Marktpreis ist</target> <target state="translated">Der aktuelle Marktpreis ist</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5980,7 +6000,7 @@
<target state="translated">Test</target> <target state="translated">Test</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6072,7 +6092,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6136,7 +6156,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6156,7 +6176,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6204,7 +6224,7 @@
<target state="translated">Jahr</target> <target state="translated">Jahr</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6224,7 +6244,7 @@
<target state="translated">Jahre</target> <target state="translated">Jahre</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6244,7 +6264,7 @@
<target state="translated">Finanzmarktdaten synchronisieren</target> <target state="translated">Finanzmarktdaten synchronisieren</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6304,6 +6324,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="translated">Täglich</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Ups! Es sieht so aus, als würdest du zu viele Anfragen senden. Bitte geh es ein bisschen langsamer an.</target> <target state="translated">Ups! Es sieht so aus, als würdest du zu viele Anfragen senden. Bitte geh es ein bisschen langsamer an.</target>
@ -6533,7 +6561,7 @@
<target state="translated">Alternative</target> <target state="translated">Alternative</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6541,7 +6569,7 @@
<target state="translated">App</target> <target state="translated">App</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6549,7 +6577,7 @@
<target state="translated">Budgetierung</target> <target state="translated">Budgetierung</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6609,7 +6637,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6625,7 +6653,7 @@
<target state="translated">Family Office</target> <target state="translated">Family Office</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6633,7 +6661,7 @@
<target state="translated">Investor</target> <target state="translated">Investor</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6645,7 +6673,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6657,7 +6685,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6665,7 +6693,7 @@
<target state="translated">Datenschutz</target> <target state="translated">Datenschutz</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6673,7 +6701,7 @@
<target state="translated">Software</target> <target state="translated">Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6681,7 +6709,7 @@
<target state="translated">Tool</target> <target state="translated">Tool</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6689,7 +6717,7 @@
<target state="translated">User Experience</target> <target state="translated">User Experience</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6697,7 +6725,7 @@
<target state="translated">Vermögen</target> <target state="translated">Vermögen</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6705,7 +6733,7 @@
<target state="translated">Vermögensverwaltung</target> <target state="translated">Vermögensverwaltung</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6729,7 +6757,7 @@
<target state="translated">Fehler</target> <target state="translated">Fehler</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6781,7 +6809,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6833,7 +6861,7 @@
<target state="translated">Schliessen</target> <target state="translated">Schliessen</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6861,7 +6889,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -7009,8 +7037,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ist Open Source Software</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ist Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -7021,8 +7049,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ist keine Open Source Software</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ist keine Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7057,8 +7085,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kann selbst gehostet werden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kann selbst gehostet werden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kann nicht selbst gehostet werden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kann nicht selbst gehostet werden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kann anonym genutzt werden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kann anonym genutzt werden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kann nicht anonym genutzt werden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kann nicht anonym genutzt werden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7113,8 +7141,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> hat ein kostenloses Angebot</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> hat ein kostenloses Angebot</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7125,8 +7153,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> hat kein kostenloses Angebot</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> hat kein kostenloses Angebot</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7379,7 +7407,7 @@
<target state="translated">Speichern</target> <target state="translated">Speichern</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7487,7 +7515,7 @@
<target state="translated">Verzögert</target> <target state="translated">Verzögert</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7495,7 +7523,7 @@
<target state="translated">Sofort</target> <target state="translated">Sofort</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7503,7 +7531,7 @@
<target state="translated">Standardmarktpreis</target> <target state="translated">Standardmarktpreis</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7511,7 +7539,7 @@
<target state="translated">Modus</target> <target state="translated">Modus</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7519,7 +7547,7 @@
<target state="translated">Selektor</target> <target state="translated">Selektor</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7527,7 +7555,7 @@
<target state="translated">HTTP Request-Headers</target> <target state="translated">HTTP Request-Headers</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7535,7 +7563,7 @@
<target state="translated">Tagesende</target> <target state="translated">Tagesende</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7543,7 +7571,7 @@
<target state="translated">in Echtzeit</target> <target state="translated">in Echtzeit</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7744,7 +7772,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) wird bereits verwendet.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) wird bereits verwendet.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7752,7 +7780,7 @@
<target state="translated">Bei der Änderung zu <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) ist ein Fehler aufgetreten.</target> <target state="translated">Bei der Änderung zu <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) ist ein Fehler aufgetreten.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="translated">Aktueller Monat</target> <target state="translated">Aktueller Monat</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -263,7 +263,7 @@
<target state="translated">Eliminar</target> <target state="translated">Eliminar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -315,7 +315,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1089827441260039381" datatype="html"> <trans-unit id="1089827441260039381" datatype="html">
@ -365,10 +365,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -419,7 +415,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -746,6 +742,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="5207635742003539443" datatype="html"> <trans-unit id="5207635742003539443" datatype="html">
<source>Sign in</source> <source>Sign in</source>
<target state="translated">Iniciar sesión</target> <target state="translated">Iniciar sesión</target>
@ -1087,7 +1091,7 @@
<target state="translated">YTD</target> <target state="translated">YTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1099,7 +1103,7 @@
<target state="translated">1 año</target> <target state="translated">1 año</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1111,7 +1115,7 @@
<target state="translated">5 años</target> <target state="translated">5 años</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1131,7 +1135,7 @@
<target state="translated">Máximo</target> <target state="translated">Máximo</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1319,7 +1323,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6780407325174304229" datatype="html"> <trans-unit id="6780407325174304229" datatype="html">
@ -1327,7 +1331,7 @@
<target state="translated">Configuración regional</target> <target state="translated">Configuración regional</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -1887,7 +1891,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2948175671993825247" datatype="html"> <trans-unit id="2948175671993825247" datatype="html">
@ -1983,7 +1987,7 @@
<target state="translated">Semana actual</target> <target state="translated">Semana actual</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2211,7 +2215,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -2330,14 +2334,6 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Importar operaciones</target> <target state="translated">Importar operaciones</target>
@ -2666,6 +2662,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Número de países</target> <target state="translated">Número de países</target>
@ -2759,11 +2763,11 @@
<target state="translated">No se pudo validar el formulario</target> <target state="translated">No se pudo validar el formulario</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -3218,6 +3222,14 @@
<context context-type="linenumber">166</context> <context context-type="linenumber">166</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Número de operaciones</target> <target state="translated">Número de operaciones</target>
@ -3414,14 +3426,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html"> <trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source> <source>Import Dividends</source>
<target state="translated">Importar dividendos</target> <target state="translated">Importar dividendos</target>
@ -3666,6 +3670,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Operaciones ilimitadas</target> <target state="translated">Operaciones ilimitadas</target>
@ -3750,6 +3762,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="7478722592449005806" datatype="html"> <trans-unit id="7478722592449005806" datatype="html">
<source>One-time payment, no auto-renewal.</source> <source>One-time payment, no auto-renewal.</source>
<target state="translated">Pago único, sin renovación automática.</target> <target state="translated">Pago único, sin renovación automática.</target>
@ -3763,11 +3783,11 @@
<target state="translated">No se pudo guardar el perfil del activo</target> <target state="translated">No se pudo guardar el perfil del activo</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -3991,7 +4011,7 @@
<target state="translated">Año actual</target> <target state="translated">Año actual</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -4011,7 +4031,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -4027,7 +4047,7 @@
<target state="translated">Perfil del activo guardado</target> <target state="translated">Perfil del activo guardado</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -4403,7 +4423,7 @@
<target state="translated">Configuración del scraper</target> <target state="translated">Configuración del scraper</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7504169991280318133" datatype="html"> <trans-unit id="7504169991280318133" datatype="html">
@ -4935,11 +4955,11 @@
<target state="translated">No se pudo analizar la configuración del scraper</target> <target state="translated">No se pudo analizar la configuración del scraper</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -5452,24 +5472,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">¿Estás buscando una alternativa de código abierto a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> es una potente herramienta de gestión de carteras que proporciona a los usuarios una plataforma completa para seguir, analizar y optimizar sus inversiones. Ya seas un inversor con experiencia o estés comenzando, Ghostfolio ofrece una interfaz intuitiva y una <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>amplia gama de funcionalidades<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> para ayudarte a tomar decisiones informadas y tener el control de tu futuro financiero.</target> <target state="translated">¿Estás buscando una alternativa de código abierto a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> es una potente herramienta de gestión de carteras que proporciona a los usuarios una plataforma completa para seguir, analizar y optimizar sus inversiones. Ya seas un inversor con experiencia o estés comenzando, Ghostfolio ofrece una interfaz intuitiva y una <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>amplia gama de funcionalidades<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> para ayudarte a tomar decisiones informadas y tener el control de tu futuro financiero.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio es un software de código abierto (OSS), que ofrece una alternativa rentable a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> lo que lo hace especialmente adecuado para personas con un presupuesto ajustado, como aquellas que <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>buscan la Independencia Financiera y Jubilación Anticipada (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Al aprovechar los esfuerzos colectivos de una comunidad de desarrolladores y entusiastas de las finanzas personales, Ghostfolio mejora continuamente sus capacidades, seguridad y experiencia de usuario.</target> <target state="translated">Ghostfolio es un software de código abierto (OSS), que ofrece una alternativa rentable a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> lo que lo hace especialmente adecuado para personas con un presupuesto ajustado, como aquellas que <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>buscan la Independencia Financiera y Jubilación Anticipada (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Al aprovechar los esfuerzos colectivos de una comunidad de desarrolladores y entusiastas de las finanzas personales, Ghostfolio mejora continuamente sus capacidades, seguridad y experiencia de usuario.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Analicemos en detalle la tabla comparativa entre Ghostfolio y <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> que encontrarás a continuación, para obtener una comprensión completa de cómo se posiciona Ghostfolio en relación con <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Exploraremos diversos aspectos como funcionalidades, privacidad de los datos, precios y más, lo que te permitirá tomar una decisión bien fundamentada según tus necesidades personales.</target> <target state="translated">Analicemos en detalle la tabla comparativa entre Ghostfolio y <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> que encontrarás a continuación, para obtener una comprensión completa de cómo se posiciona Ghostfolio en relación con <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Exploraremos diversos aspectos como funcionalidades, privacidad de los datos, precios y más, lo que te permitirá tomar una decisión bien fundamentada según tus necesidades personales.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5489,8 +5509,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Ten en cuenta que la información proporcionada en la tabla comparativa entre Ghostfolio y <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> se basa en nuestra investigación y análisis independientes. Este sitio web no está afiliado con <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> ni con ningún otro producto mencionado en la comparación. Dado que el panorama de las herramientas de finanzas personales evoluciona constantemente, es fundamental verificar cualquier detalle específico o cambio directamente en la página oficial del producto correspondiente. ¿Los datos necesitan una actualización? Ayúdanos a mantener la información precisa en <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Ten en cuenta que la información proporcionada en la tabla comparativa entre Ghostfolio y <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> se basa en nuestra investigación y análisis independientes. Este sitio web no está afiliado con <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> ni con ningún otro producto mencionado en la comparación. Dado que el panorama de las herramientas de finanzas personales evoluciona constantemente, es fundamental verificar cualquier detalle específico o cambio directamente en la página oficial del producto correspondiente. ¿Los datos necesitan una actualización? Ayúdanos a mantener la información precisa en <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5509,7 +5529,7 @@
<target state="translated">Global</target> <target state="translated">Global</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5813,8 +5833,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Tabla comparativa de Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/></target> <target state="translated">Tabla comparativa de Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5949,7 +5969,7 @@
<target state="translated">El precio actual de mercado es</target> <target state="translated">El precio actual de mercado es</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5957,7 +5977,7 @@
<target state="translated">Prueba</target> <target state="translated">Prueba</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6049,7 +6069,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6113,7 +6133,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6133,7 +6153,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6181,7 +6201,7 @@
<target state="translated">año</target> <target state="translated">año</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6201,7 +6221,7 @@
<target state="translated">años</target> <target state="translated">años</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6221,7 +6241,7 @@
<target state="translated">Recopilación de datos</target> <target state="translated">Recopilación de datos</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6281,6 +6301,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">¡Vaya! Parece que estás haciendo demasiadas solicitudes. Por favor, reduce la velocidad un poco.</target> <target state="translated">¡Vaya! Parece que estás haciendo demasiadas solicitudes. Por favor, reduce la velocidad un poco.</target>
@ -6510,7 +6538,7 @@
<target state="translated">Alternativa</target> <target state="translated">Alternativa</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6518,7 +6546,7 @@
<target state="translated">Aplicación</target> <target state="translated">Aplicación</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6526,7 +6554,7 @@
<target state="translated">Presupuestos</target> <target state="translated">Presupuestos</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6586,7 +6614,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6602,7 +6630,7 @@
<target state="translated">Family Office</target> <target state="translated">Family Office</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6610,7 +6638,7 @@
<target state="translated">Inversor</target> <target state="translated">Inversor</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6622,7 +6650,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6634,7 +6662,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6642,7 +6670,7 @@
<target state="translated">Privacidad</target> <target state="translated">Privacidad</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6650,7 +6678,7 @@
<target state="translated">Software</target> <target state="translated">Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6658,7 +6686,7 @@
<target state="translated">Herramienta</target> <target state="translated">Herramienta</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6666,7 +6694,7 @@
<target state="translated">Experiencia del usuario</target> <target state="translated">Experiencia del usuario</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6674,7 +6702,7 @@
<target state="translated">Patrimonio</target> <target state="translated">Patrimonio</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6682,7 +6710,7 @@
<target state="translated">Gestión de patrimonios</target> <target state="translated">Gestión de patrimonios</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6706,7 +6734,7 @@
<target state="translated">Error</target> <target state="translated">Error</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6758,7 +6786,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6810,7 +6838,7 @@
<target state="translated">Cerrar</target> <target state="translated">Cerrar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6838,7 +6866,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6986,8 +7014,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> es software de código abierto</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> es software de código abierto</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6998,8 +7026,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> no es software de código abierto</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> no es software de código abierto</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7034,8 +7062,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> se puede autoalojar</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> se puede autoalojar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7054,8 +7082,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> no se puede autoalojar</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> no se puede autoalojar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7066,8 +7094,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> se puede usar de forma anónima</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> se puede usar de forma anónima</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7078,8 +7106,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> no se puede usar de forma anónima</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> no se puede usar de forma anónima</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7090,8 +7118,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ofrece un plan gratuito</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ofrece un plan gratuito</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7102,8 +7130,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> no ofrece un plan gratuito</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> no ofrece un plan gratuito</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7356,7 +7384,7 @@
<target state="translated">Guardar</target> <target state="translated">Guardar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7464,7 +7492,7 @@
<target state="translated">Bajo demanda</target> <target state="translated">Bajo demanda</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7472,7 +7500,7 @@
<target state="translated">Instantáneo</target> <target state="translated">Instantáneo</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7480,7 +7508,7 @@
<target state="translated">Precio de mercado por defecto</target> <target state="translated">Precio de mercado por defecto</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7488,7 +7516,7 @@
<target state="translated">Modo</target> <target state="translated">Modo</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7496,7 +7524,7 @@
<target state="translated">Selector</target> <target state="translated">Selector</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7504,7 +7532,7 @@
<target state="translated">Encabezados de solicitud HTTP</target> <target state="translated">Encabezados de solicitud HTTP</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7512,7 +7540,7 @@
<target state="translated">final del día</target> <target state="translated">final del día</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7520,7 +7548,7 @@
<target state="translated">en tiempo real</target> <target state="translated">en tiempo real</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7721,7 +7749,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) ya está en uso.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) ya está en uso.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7729,7 +7757,7 @@
<target state="translated">Ocurrió un error al actualizar a <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="translated">Ocurrió un error al actualizar a <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8080,7 +8108,7 @@
<target state="translated">Mes actual</target> <target state="translated">Mes actual</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -318,7 +318,7 @@
<target state="translated">Supprimer</target> <target state="translated">Supprimer</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -370,7 +370,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -412,10 +412,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -474,7 +470,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -581,6 +577,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Nombre d’Activités</target> <target state="translated">Nombre d’Activités</target>
@ -609,6 +613,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Nombre de Pays</target> <target state="translated">Nombre de Pays</target>
@ -910,11 +922,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -942,7 +954,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1342,7 +1354,7 @@
<target state="translated">CDA</target> <target state="translated">CDA</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1354,7 +1366,7 @@
<target state="translated">1A</target> <target state="translated">1A</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1366,7 +1378,7 @@
<target state="translated">5A</target> <target state="translated">5A</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1386,7 +1398,7 @@
<target state="translated">Max</target> <target state="translated">Max</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1622,7 +1634,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -1638,7 +1650,7 @@
<target state="translated">Paramètres régionaux</target> <target state="translated">Paramètres régionaux</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -2170,7 +2182,7 @@
<target state="new">Current week</target> <target state="new">Current week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2410,7 +2422,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -2697,6 +2709,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="8298333184054476827" datatype="html"> <trans-unit id="8298333184054476827" datatype="html">
<source>Registration</source> <source>Registration</source>
<target state="translated">Enregistrement</target> <target state="translated">Enregistrement</target>
@ -2841,14 +2861,6 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Importer Activités</target> <target state="translated">Importer Activités</target>
@ -3413,14 +3425,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html"> <trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source> <source>Import Dividends</source>
<target state="translated">Importer Dividendes</target> <target state="translated">Importer Dividendes</target>
@ -3665,6 +3669,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Transactions Illimitées</target> <target state="translated">Transactions Illimitées</target>
@ -3749,6 +3761,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="7478722592449005806" datatype="html"> <trans-unit id="7478722592449005806" datatype="html">
<source>One-time payment, no auto-renewal.</source> <source>One-time payment, no auto-renewal.</source>
<target state="translated">Paiement unique, sans auto-renouvellement.</target> <target state="translated">Paiement unique, sans auto-renouvellement.</target>
@ -3762,11 +3782,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -3990,7 +4010,7 @@
<target state="new">Current year</target> <target state="new">Current year</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -4010,7 +4030,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -4026,7 +4046,7 @@
<target state="new">Asset profile has been saved</target> <target state="new">Asset profile has been saved</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -4402,7 +4422,7 @@
<target state="translated">Configuration du Scraper</target> <target state="translated">Configuration du Scraper</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7504169991280318133" datatype="html"> <trans-unit id="7504169991280318133" datatype="html">
@ -4934,11 +4954,11 @@
<target state="new">Could not parse scraper configuration</target> <target state="new">Could not parse scraper configuration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -5451,24 +5471,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Cherchez-vous des alternatives open source à <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> est un outil de gestion de portefeuille puissant offrant aux particuliers une plateforme complète pour suivre, analyser et optimiser ses investissements. Que vous soyez un investisseur expérimenté ou que vous débutiez, Ghostfolio offre une interface utilisateur intuitive et une <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>large gamme de fonctionnalités<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> pour vous aider à prendre des décisions éclairées et à prendre le contrôle de votre avenir financier.</target> <target state="translated">Cherchez-vous des alternatives open source à <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> est un outil de gestion de portefeuille puissant offrant aux particuliers une plateforme complète pour suivre, analyser et optimiser ses investissements. Que vous soyez un investisseur expérimenté ou que vous débutiez, Ghostfolio offre une interface utilisateur intuitive et une <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>large gamme de fonctionnalités<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> pour vous aider à prendre des décisions éclairées et à prendre le contrôle de votre avenir financier.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio est un logiciel open source (OSS), offrant une alternative économique, <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> le rendant particulièrement adaptée aux personnes disposant d’un budget serré, telles que celles qui <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>cherchent à atteindre le mouvement Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. En s’appuyant sur les efforts collectifs d’une communauté de développeurs et de passionnés de finances personnelles, Ghostfolio améliore continuellement ses fonctionnalités, sa sécurité et son expérience utilisateur.</target> <target state="translated">Ghostfolio est un logiciel open source (OSS), offrant une alternative économique, <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> le rendant particulièrement adaptée aux personnes disposant d’un budget serré, telles que celles qui <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>cherchent à atteindre le mouvement Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. En s’appuyant sur les efforts collectifs d’une communauté de développeurs et de passionnés de finances personnelles, Ghostfolio améliore continuellement ses fonctionnalités, sa sécurité et son expérience utilisateur.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Regardons plus en détails ce que proposent Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> via la table de comparaison ci-dessous pour comprendre comment Ghostfolio se positionne par rapport à <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Nous examinerons divers aspects tels que les fonctionnalités, la confidentialité des données, le prix, etc., afin de vous permettre de faire un choix éclairé en fonction de vos besoins personnels.</target> <target state="translated">Regardons plus en détails ce que proposent Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> via la table de comparaison ci-dessous pour comprendre comment Ghostfolio se positionne par rapport à <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Nous examinerons divers aspects tels que les fonctionnalités, la confidentialité des données, le prix, etc., afin de vous permettre de faire un choix éclairé en fonction de vos besoins personnels.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5488,8 +5508,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Veuillez noter que les informations fournies dans le Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> via la table de comparaison se basent de nos recherches et analyses indépendantes. Ce site n’est pas affilié à <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> ou tout autre produit mentionné dans la comparaison. Le paysage des outils de finances personnelles évoluant, il est essentiel de vérifier tout détail ou changement spécifique directement sur la page du produit concerné. Certaines données doivent être mises à jour ? Aidez-nous à maintenir les données exactes sur <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Veuillez noter que les informations fournies dans le Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> via la table de comparaison se basent de nos recherches et analyses indépendantes. Ce site n’est pas affilié à <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> ou tout autre produit mentionné dans la comparaison. Le paysage des outils de finances personnelles évoluant, il est essentiel de vérifier tout détail ou changement spécifique directement sur la page du produit concerné. Certaines données doivent être mises à jour ? Aidez-nous à maintenir les données exactes sur <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5508,7 +5528,7 @@
<target state="translated">Mondial</target> <target state="translated">Mondial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5812,8 +5832,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> tableau comparatif</target> <target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> tableau comparatif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5948,7 +5968,7 @@
<target state="translated">Le prix actuel du marché est</target> <target state="translated">Le prix actuel du marché est</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5956,7 +5976,7 @@
<target state="translated">Test</target> <target state="translated">Test</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6048,7 +6068,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6112,7 +6132,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6132,7 +6152,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6180,7 +6200,7 @@
<target state="translated">année</target> <target state="translated">année</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6200,7 +6220,7 @@
<target state="translated">années</target> <target state="translated">années</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6220,7 +6240,7 @@
<target state="translated">Collecter les données</target> <target state="translated">Collecter les données</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6280,6 +6300,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Oops! Il semble que vous fassiez trop de requêtes. Veuillez ralentir un peu.</target> <target state="translated">Oops! Il semble que vous fassiez trop de requêtes. Veuillez ralentir un peu.</target>
@ -6509,7 +6537,7 @@
<target state="translated">Alternative</target> <target state="translated">Alternative</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6517,7 +6545,7 @@
<target state="translated">App</target> <target state="translated">App</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6525,7 +6553,7 @@
<target state="translated">Budget</target> <target state="translated">Budget</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6585,7 +6613,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6601,7 +6629,7 @@
<target state="translated">Family Office</target> <target state="translated">Family Office</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6609,7 +6637,7 @@
<target state="translated">Investisseur</target> <target state="translated">Investisseur</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6621,7 +6649,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6633,7 +6661,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6641,7 +6669,7 @@
<target state="translated">Confidentialité</target> <target state="translated">Confidentialité</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6649,7 +6677,7 @@
<target state="translated">Logiciels</target> <target state="translated">Logiciels</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6657,7 +6685,7 @@
<target state="translated">Outils</target> <target state="translated">Outils</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6665,7 +6693,7 @@
<target state="translated">Expérience Utilisateur</target> <target state="translated">Expérience Utilisateur</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6673,7 +6701,7 @@
<target state="translated">Patrimoine</target> <target state="translated">Patrimoine</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6681,7 +6709,7 @@
<target state="translated">Gestion de Patrimoine</target> <target state="translated">Gestion de Patrimoine</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6705,7 +6733,7 @@
<target state="translated">Erreur</target> <target state="translated">Erreur</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6757,7 +6785,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6809,7 +6837,7 @@
<target state="translated">Fermer</target> <target state="translated">Fermer</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6837,7 +6865,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6985,8 +7013,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> est un logiciel open source</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> est un logiciel open source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6997,8 +7025,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> n’est pas un logiciel open source</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> n’est pas un logiciel open source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7033,8 +7061,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> peut être auto-hébergé</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> peut être auto-hébergé</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7053,8 +7081,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ne peut pas être auto-hébergé</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ne peut pas être auto-hébergé</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7065,8 +7093,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> peut être utilisé de manière anonyme</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> peut être utilisé de manière anonyme</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ne peut pas être utilisé de manière anonyme</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ne peut pas être utilisé de manière anonyme</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> propose un plan gratuit</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> propose un plan gratuit</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ne propose pas de plan gratuit</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ne propose pas de plan gratuit</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7355,7 +7383,7 @@
<target state="translated">Sauvegarder</target> <target state="translated">Sauvegarder</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="translated">Paresseux</target> <target state="translated">Paresseux</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="translated">Instantané</target> <target state="translated">Instantané</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="translated">Prix du marché par défaut</target> <target state="translated">Prix du marché par défaut</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="translated">Mode</target> <target state="translated">Mode</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="translated">Selecteur</target> <target state="translated">Selecteur</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="translated">En-têtes de requête HTTP</target> <target state="translated">En-têtes de requête HTTP</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="translated">fin de journée</target> <target state="translated">fin de journée</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="translated">temps réel</target> <target state="translated">temps réel</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) est déjà utilisé.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) est déjà utilisé.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="translated">Une erreur s’est produite lors de la mise à jour vers <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="translated">Une erreur s’est produite lors de la mise à jour vers <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="new">Current month</target> <target state="new">Current month</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -263,7 +263,7 @@
<target state="translated">Elimina</target> <target state="translated">Elimina</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -315,7 +315,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1089827441260039381" datatype="html"> <trans-unit id="1089827441260039381" datatype="html">
@ -365,10 +365,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -419,7 +415,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -746,6 +742,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="5207635742003539443" datatype="html"> <trans-unit id="5207635742003539443" datatype="html">
<source>Sign in</source> <source>Sign in</source>
<target state="translated">Accedi</target> <target state="translated">Accedi</target>
@ -1087,7 +1091,7 @@
<target state="translated">anno corrente</target> <target state="translated">anno corrente</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1099,7 +1103,7 @@
<target state="translated">1 anno</target> <target state="translated">1 anno</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1111,7 +1115,7 @@
<target state="translated">5 anni</target> <target state="translated">5 anni</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1131,7 +1135,7 @@
<target state="translated">Massimo</target> <target state="translated">Massimo</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1319,7 +1323,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6780407325174304229" datatype="html"> <trans-unit id="6780407325174304229" datatype="html">
@ -1327,7 +1331,7 @@
<target state="translated">Locale</target> <target state="translated">Locale</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -1887,7 +1891,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2948175671993825247" datatype="html"> <trans-unit id="2948175671993825247" datatype="html">
@ -1983,7 +1987,7 @@
<target state="new">Current week</target> <target state="new">Current week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2211,7 +2215,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -2330,14 +2334,6 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Importa le attività</target> <target state="translated">Importa le attività</target>
@ -2666,6 +2662,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Numero di paesi</target> <target state="translated">Numero di paesi</target>
@ -2759,11 +2763,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -3218,6 +3222,14 @@
<context context-type="linenumber">166</context> <context context-type="linenumber">166</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Conteggio attività</target> <target state="translated">Conteggio attività</target>
@ -3414,14 +3426,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html"> <trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source> <source>Import Dividends</source>
<target state="translated">Importa i dividendi</target> <target state="translated">Importa i dividendi</target>
@ -3666,6 +3670,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Transazioni illimitate</target> <target state="translated">Transazioni illimitate</target>
@ -3750,6 +3762,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="7478722592449005806" datatype="html"> <trans-unit id="7478722592449005806" datatype="html">
<source>One-time payment, no auto-renewal.</source> <source>One-time payment, no auto-renewal.</source>
<target state="translated">Pagamento una tantum, senza rinnovo automatico.</target> <target state="translated">Pagamento una tantum, senza rinnovo automatico.</target>
@ -3763,11 +3783,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -3991,7 +4011,7 @@
<target state="new">Current year</target> <target state="new">Current year</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -4011,7 +4031,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -4027,7 +4047,7 @@
<target state="new">Asset profile has been saved</target> <target state="new">Asset profile has been saved</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -4403,7 +4423,7 @@
<target state="translated">Configurazione dello scraper</target> <target state="translated">Configurazione dello scraper</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7504169991280318133" datatype="html"> <trans-unit id="7504169991280318133" datatype="html">
@ -4935,11 +4955,11 @@
<target state="new">Could not parse scraper configuration</target> <target state="new">Could not parse scraper configuration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -5452,24 +5472,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Stai cercando un’alternativa open source a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> è un potente strumento di gestione del portafoglio che fornisce alle persone una piattaforma completa per monitorare, analizzare e ottimizzare i propri investimenti. Che tu sia un investitore esperto o alle prime armi, Ghostfolio offre un’interfaccia utente intuitiva e <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>un’ampia gamma di funzionalità<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> per aiutarti a prendere decisioni informate e il controllo del tuo futuro finanziario.</target> <target state="translated">Stai cercando un’alternativa open source a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> è un potente strumento di gestione del portafoglio che fornisce alle persone una piattaforma completa per monitorare, analizzare e ottimizzare i propri investimenti. Che tu sia un investitore esperto o alle prime armi, Ghostfolio offre un’interfaccia utente intuitiva e <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>un’ampia gamma di funzionalità<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> per aiutarti a prendere decisioni informate e il controllo del tuo futuro finanziario.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio è un software open source (OSS) che offre un’alternativa economicamente vantaggiosa a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> particolarmente adatta a persone con un budget limitato, come quelle che <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>perseguono l’indipendenza finanziaria e il pensionamento anticipato (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Grazie agli sforzi collettivi di una comunità di sviluppatori e di appassionati di finanza personale, Ghostfolio migliora continuamente le sue capacità, la sua sicurezza e la sua esperienza utente.</target> <target state="translated">Ghostfolio è un software open source (OSS) che offre un’alternativa economicamente vantaggiosa a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> particolarmente adatta a persone con un budget limitato, come quelle che <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>perseguono l’indipendenza finanziaria e il pensionamento anticipato (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Grazie agli sforzi collettivi di una comunità di sviluppatori e di appassionati di finanza personale, Ghostfolio migliora continuamente le sue capacità, la sua sicurezza e la sua esperienza utente.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Analizziamo nel dettaglio la tabella di confronto qui sotto per comprendere a fondo come Ghostfolio si posiziona rispetto a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Esploreremo vari aspetti come le caratteristiche, la privacy dei dati, il prezzo e altro ancora, permettendoti di fare una scelta ben informata per le tue esigenze personali.</target> <target state="translated">Analizziamo nel dettaglio la tabella di confronto qui sotto per comprendere a fondo come Ghostfolio si posiziona rispetto a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Esploreremo vari aspetti come le caratteristiche, la privacy dei dati, il prezzo e altro ancora, permettendoti di fare una scelta ben informata per le tue esigenze personali.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5489,8 +5509,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Nota bene: le informazioni fornite si basano sulle nostre ricerche e analisi indipendenti. Questo sito web non è affiliato con <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> o a qualsiasi altro prodotto citato nel confronto. Poiché il panorama degli strumenti di finanza personale si evolve, è essenziale verificare qualsiasi dettaglio o modifica specifica direttamente nella pagina del prodotto in questione. I dati hanno bisogno di essere aggiornati? Aiutaci a mantenere i dati accurati su <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Nota bene: le informazioni fornite si basano sulle nostre ricerche e analisi indipendenti. Questo sito web non è affiliato con <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> o a qualsiasi altro prodotto citato nel confronto. Poiché il panorama degli strumenti di finanza personale si evolve, è essenziale verificare qualsiasi dettaglio o modifica specifica direttamente nella pagina del prodotto in questione. I dati hanno bisogno di essere aggiornati? Aiutaci a mantenere i dati accurati su <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5509,7 +5529,7 @@
<target state="translated">Globale</target> <target state="translated">Globale</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5813,8 +5833,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> tabella di comparazione</target> <target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> tabella di comparazione</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5949,7 +5969,7 @@
<target state="translated">L’attuale prezzo di mercato è</target> <target state="translated">L’attuale prezzo di mercato è</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5957,7 +5977,7 @@
<target state="translated">Prova</target> <target state="translated">Prova</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6049,7 +6069,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6113,7 +6133,7 @@
<target state="translated">Settimana corrente</target> <target state="translated">Settimana corrente</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6133,7 +6153,7 @@
<target state="translated">Mese corrente</target> <target state="translated">Mese corrente</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6181,7 +6201,7 @@
<target state="translated">anno</target> <target state="translated">anno</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6201,7 +6221,7 @@
<target state="translated">anni</target> <target state="translated">anni</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6221,7 +6241,7 @@
<target state="translated">Raccolta Dati</target> <target state="translated">Raccolta Dati</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6281,6 +6301,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Ops! Sembra tu stia facendo troppe richieste. Rallenta un po’ per favore.</target> <target state="translated">Ops! Sembra tu stia facendo troppe richieste. Rallenta un po’ per favore.</target>
@ -6510,7 +6538,7 @@
<target state="translated">Alternativa</target> <target state="translated">Alternativa</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6518,7 +6546,7 @@
<target state="translated">App</target> <target state="translated">App</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6526,7 +6554,7 @@
<target state="translated">Budgeting</target> <target state="translated">Budgeting</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6586,7 +6614,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6602,7 +6630,7 @@
<target state="translated">Ufficio familiare</target> <target state="translated">Ufficio familiare</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6610,7 +6638,7 @@
<target state="translated">Investitore</target> <target state="translated">Investitore</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6622,7 +6650,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6634,7 +6662,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6642,7 +6670,7 @@
<target state="translated">Privacy</target> <target state="translated">Privacy</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6650,7 +6678,7 @@
<target state="translated">Software</target> <target state="translated">Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6658,7 +6686,7 @@
<target state="translated">Strumento</target> <target state="translated">Strumento</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6666,7 +6694,7 @@
<target state="translated">Esperienza Utente</target> <target state="translated">Esperienza Utente</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6674,7 +6702,7 @@
<target state="translated">Ricchezza</target> <target state="translated">Ricchezza</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6682,7 +6710,7 @@
<target state="translated">Gestione Patrimoniale</target> <target state="translated">Gestione Patrimoniale</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6706,7 +6734,7 @@
<target state="translated">Errore</target> <target state="translated">Errore</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6758,7 +6786,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6810,7 +6838,7 @@
<target state="translated">Chiudi</target> <target state="translated">Chiudi</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6838,7 +6866,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6986,8 +7014,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> è un programma Open Source</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> è un programma Open Source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6998,8 +7026,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> non è un programma Open Source</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> non è un programma Open Source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7034,8 +7062,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> può essere ospitato in proprio</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> può essere ospitato in proprio</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7054,8 +7082,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> non può essere ospitato in proprio</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> non può essere ospitato in proprio</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7066,8 +7094,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> può essere usato anonimamente</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> può essere usato anonimamente</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7078,8 +7106,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> non può essere usato anonimamente</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> non può essere usato anonimamente</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7090,8 +7118,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ha un piano gratuito</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ha un piano gratuito</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7102,8 +7130,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> non ha un piano gratuito</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> non ha un piano gratuito</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7356,7 +7384,7 @@
<target state="translated">Salva</target> <target state="translated">Salva</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7464,7 +7492,7 @@
<target state="translated">Pigro</target> <target state="translated">Pigro</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7472,7 +7500,7 @@
<target state="translated">Istantaneo</target> <target state="translated">Istantaneo</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7480,7 +7508,7 @@
<target state="translated">Prezzo di mercato predefinito</target> <target state="translated">Prezzo di mercato predefinito</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7488,7 +7516,7 @@
<target state="translated">Modalità</target> <target state="translated">Modalità</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7496,7 +7524,7 @@
<target state="translated">Selettore</target> <target state="translated">Selettore</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7504,7 +7532,7 @@
<target state="translated">Intestazioni della richiesta HTTP</target> <target state="translated">Intestazioni della richiesta HTTP</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7512,7 +7540,7 @@
<target state="translated">fine giornata</target> <target state="translated">fine giornata</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7520,7 +7548,7 @@
<target state="translated">in tempo reale</target> <target state="translated">in tempo reale</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7721,7 +7749,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) e gia in uso.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) e gia in uso.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7729,7 +7757,7 @@
<target state="translated">Si è verificato un errore durante l’aggiornamento di <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="translated">Si è verificato un errore durante l’aggiornamento di <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8080,7 +8108,7 @@
<target state="new">Current month</target> <target state="new">Current month</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

242
apps/client/src/locales/messages.ko.xlf

@ -548,7 +548,7 @@
<target state="translated">삭제</target> <target state="translated">삭제</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -600,7 +600,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3175281009707730014" datatype="html"> <trans-unit id="3175281009707730014" datatype="html">
@ -620,7 +620,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -662,10 +662,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -847,6 +843,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">거래 건수</target> <target state="translated">거래 건수</target>
@ -875,6 +879,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">국가 수</target> <target state="translated">국가 수</target>
@ -1064,7 +1076,7 @@
<target state="translated">스크래퍼 설정</target> <target state="translated">스크래퍼 설정</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1284,7 +1296,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1300,7 +1312,7 @@
<target state="translated">자산 정보가 저장되었습니다.</target> <target state="translated">자산 정보가 저장되었습니다.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -1340,7 +1352,7 @@
<target state="translated">올해</target> <target state="translated">올해</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1480,11 +1492,11 @@
<target state="translated">양식 유효성 검사에 실패했습니다.</target> <target state="translated">양식 유효성 검사에 실패했습니다.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1520,7 +1532,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1736,7 +1748,7 @@
<target state="translated">이번주</target> <target state="translated">이번주</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2220,7 +2232,7 @@
<target state="translated">연초 대비</target> <target state="translated">연초 대비</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2232,7 +2244,7 @@
<target state="translated">1년</target> <target state="translated">1년</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2244,7 +2256,7 @@
<target state="translated">5년</target> <target state="translated">5년</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2264,7 +2276,7 @@
<target state="translated">맥스</target> <target state="translated">맥스</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2428,7 +2440,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -2444,7 +2456,7 @@
<target state="translated">장소</target> <target state="translated">장소</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -3028,11 +3040,11 @@
<target state="translated">스크래퍼 설정을 파싱할 수 없습니다.</target> <target state="translated">스크래퍼 설정을 파싱할 수 없습니다.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -3235,6 +3247,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<target state="translated">보유 종목</target> <target state="translated">보유 종목</target>
@ -3919,14 +3939,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">거래 내역 가져오기</target> <target state="translated">거래 내역 가져오기</target>
@ -4176,7 +4188,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -4343,14 +4355,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="6293970137138896363" datatype="html"> <trans-unit id="6293970137138896363" datatype="html">
<source>Top</source> <source>Top</source>
<target state="translated">상위</target> <target state="translated">상위</target>
@ -4487,6 +4491,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">무제한 거래</target> <target state="translated">무제한 거래</target>
@ -4591,6 +4603,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<target state="translated">이메일 및 채팅 지원</target> <target state="translated">이메일 및 채팅 지원</target>
@ -4628,11 +4648,11 @@
<target state="translated">자산 정보를 저장할 수 없습니다.</target> <target state="translated">자산 정보를 저장할 수 없습니다.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -4773,24 +4793,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>에 대한 오픈소스 대안을 찾고 계십니까? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>는 개인에게 투자를 추적, 분석, 최적화할 수 있는 포괄적인 플랫폼을 제공하는 강력한 포트폴리오 관리 도구입니다. 숙련된 투자자이든 이제 막 시작한 투자자이든 Ghostfolio는 직관적인 사용자 인터페이스와 <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>다양한 기능<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>을 제공하여 정보에 입각한 결정을 내리고 재정적 미래를 관리하는 데 도움을 줍니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>에 대한 오픈소스 대안을 찾고 계십니까? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>는 개인에게 투자를 추적, 분석, 최적화할 수 있는 포괄적인 플랫폼을 제공하는 강력한 포트폴리오 관리 도구입니다. 숙련된 투자자이든 이제 막 시작한 투자자이든 Ghostfolio는 직관적인 사용자 인터페이스와 <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>다양한 기능<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>을 제공하여 정보에 입각한 결정을 내리고 재정적 미래를 관리하는 데 도움을 줍니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio는 오픈 소스 소프트웨어로, <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>에 대한 비용 효율적인 대안을 제공하므로 <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>재정적 독립, 조기 퇴직(FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>을 추구하는 사람과 같이 예산이 부족한 개인에게 특히 적합합니다. Ghostfolio는 개발자 커뮤니티와 개인 금융 애호가들의 공동 노력을 활용하여 기능, 보안 및 사용자 경험을 지속적으로 향상시킵니다.</target> <target state="translated">Ghostfolio는 오픈 소스 소프트웨어로, <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>에 대한 비용 효율적인 대안을 제공하므로 <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>재정적 독립, 조기 퇴직(FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>을 추구하는 사람과 같이 예산이 부족한 개인에게 특히 적합합니다. Ghostfolio는 개발자 커뮤니티와 개인 금융 애호가들의 공동 노력을 활용하여 기능, 보안 및 사용자 경험을 지속적으로 향상시킵니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Ghostfolio가 <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>과 관련하여 어떻게 위치하는지 철저하게 이해하기 위해 아래의 자세한 Ghostfolio 대 <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> 비교표를 자세히 살펴보겠습니다. 우리는 기능, 데이터 개인 정보 보호, 가격 등과 같은 다양한 측면을 탐색하여 귀하의 개인 요구 사항에 맞는 정보를 바탕으로 선택할 수 있도록 할 것입니다.</target> <target state="translated">Ghostfolio가 <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>과 관련하여 어떻게 위치하는지 철저하게 이해하기 위해 아래의 자세한 Ghostfolio 대 <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> 비교표를 자세히 살펴보겠습니다. 우리는 기능, 데이터 개인 정보 보호, 가격 등과 같은 다양한 측면을 탐색하여 귀하의 개인 요구 사항에 맞는 정보를 바탕으로 선택할 수 있도록 할 것입니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -4809,8 +4829,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio와 <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> 비교표</target> <target state="translated">Ghostfolio와 <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> 비교표</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -4973,8 +4993,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Ghostfolio와 <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> 비교표에 제공된 정보는 당사의 독립적인 연구 및 분석을 기반으로 한 것입니다. 이 웹사이트는 <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> 또는 비교에 언급된 다른 제품과 관련이 없습니다. 개인 금융 도구의 환경이 발전함에 따라 각 제품 페이지에서 직접 특정 세부 정보나 변경 사항을 확인하는 것이 중요합니다. 데이터를 새로 고쳐야 합니까? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>깃허브<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>에서 정확한 데이터를 유지할 수 있도록 도와주세요.</target> <target state="translated">Ghostfolio와 <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> 비교표에 제공된 정보는 당사의 독립적인 연구 및 분석을 기반으로 한 것입니다. 이 웹사이트는 <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> 또는 비교에 언급된 다른 제품과 관련이 없습니다. 개인 금융 도구의 환경이 발전함에 따라 각 제품 페이지에서 직접 특정 세부 정보나 변경 사항을 확인하는 것이 중요합니다. 데이터를 새로 고쳐야 합니까? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>깃허브<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>에서 정확한 데이터를 유지할 수 있도록 도와주세요.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5001,7 +5021,7 @@
<target state="translated">글로벌</target> <target state="translated">글로벌</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5981,7 +6001,7 @@
<target state="translated">현재 시장가격은</target> <target state="translated">현재 시장가격은</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5989,7 +6009,7 @@
<target state="translated">시험</target> <target state="translated">시험</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2570446216260149991" datatype="html"> <trans-unit id="2570446216260149991" datatype="html">
@ -6097,7 +6117,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6153,7 +6173,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6165,7 +6185,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6205,7 +6225,7 @@
<target state="translated">년도</target> <target state="translated">년도</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6225,7 +6245,7 @@
<target state="translated">연령</target> <target state="translated">연령</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6270,7 +6290,7 @@
<target state="translated">데이터 수집</target> <target state="translated">데이터 수집</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6305,6 +6325,14 @@
<context context-type="linenumber">240</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">이런! 요청을 너무 많이 하시는 것 같습니다. 조금 천천히 해주세요.</target> <target state="translated">이런! 요청을 너무 많이 하시는 것 같습니다. 조금 천천히 해주세요.</target>
@ -6534,7 +6562,7 @@
<target state="translated">재산</target> <target state="translated">재산</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6594,7 +6622,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6610,7 +6638,7 @@
<target state="translated">사용자 경험</target> <target state="translated">사용자 경험</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6618,7 +6646,7 @@
<target state="translated">앱</target> <target state="translated">앱</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6626,7 +6654,7 @@
<target state="translated">도구</target> <target state="translated">도구</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6634,7 +6662,7 @@
<target state="translated">투자자</target> <target state="translated">투자자</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6642,7 +6670,7 @@
<target state="translated">자산관리</target> <target state="translated">자산관리</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6658,7 +6686,7 @@
<target state="translated">대안</target> <target state="translated">대안</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4622218074144052433" datatype="html"> <trans-unit id="4622218074144052433" datatype="html">
@ -6666,7 +6694,7 @@
<target state="translated">패밀리오피스</target> <target state="translated">패밀리오피스</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6678,7 +6706,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6686,7 +6714,7 @@
<target state="translated">소프트웨어</target> <target state="translated">소프트웨어</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6694,7 +6722,7 @@
<target state="translated">예산 편성</target> <target state="translated">예산 편성</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6706,7 +6734,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6714,7 +6742,7 @@
<target state="translated">은둔</target> <target state="translated">은둔</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1518717392874668219" datatype="html"> <trans-unit id="1518717392874668219" datatype="html">
@ -6730,7 +6758,7 @@
<target state="translated">오류</target> <target state="translated">오류</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6742,7 +6770,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6826,7 +6854,7 @@
<target state="translated">닫다</target> <target state="translated">닫다</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6854,7 +6882,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6994,8 +7022,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 무료 요금제를 제공합니다</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 무료 요금제를 제공합니다</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7006,8 +7034,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 무료 요금제를 제공하지 않습니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 무료 요금제를 제공하지 않습니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7050,8 +7078,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 자체 호스팅 가능</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 자체 호스팅 가능</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7070,8 +7098,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 자체 호스팅할 수 없습니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 자체 호스팅할 수 없습니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7082,8 +7110,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 익명으로 사용할 수 있습니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 익명으로 사용할 수 있습니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7094,8 +7122,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 익명으로 사용할 수 없습니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 익명으로 사용할 수 없습니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7106,8 +7134,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 오픈 소스 소프트웨어가 아닙니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 오픈 소스 소프트웨어가 아닙니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7118,8 +7146,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>은(는) 오픈 소스 소프트웨어입니다.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>은(는) 오픈 소스 소프트웨어입니다.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -7380,7 +7408,7 @@
<target state="translated">구하다</target> <target state="translated">구하다</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7488,7 +7516,7 @@
<target state="translated">방법</target> <target state="translated">방법</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7496,7 +7524,7 @@
<target state="translated">기본 시장 가격</target> <target state="translated">기본 시장 가격</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7504,7 +7532,7 @@
<target state="translated">선택자</target> <target state="translated">선택자</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7512,7 +7540,7 @@
<target state="translated">즉각적인</target> <target state="translated">즉각적인</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8540986733881734625" datatype="html"> <trans-unit id="8540986733881734625" datatype="html">
@ -7520,7 +7548,7 @@
<target state="translated">게으른</target> <target state="translated">게으른</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7528,7 +7556,7 @@
<target state="translated">HTTP 요청 헤더</target> <target state="translated">HTTP 요청 헤더</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7536,7 +7564,7 @@
<target state="translated">실시간</target> <target state="translated">실시간</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7544,7 +7572,7 @@
<target state="translated">하루의 끝</target> <target state="translated">하루의 끝</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7745,7 +7773,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>)은(는) 이미 사용 중입니다.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>)은(는) 이미 사용 중입니다.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7753,7 +7781,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/>(<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>)로 업데이트하는 동안 오류가 발생했습니다.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/>(<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>)로 업데이트하는 동안 오류가 발생했습니다.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8080,7 +8108,7 @@
<target state="translated">이번 달</target> <target state="translated">이번 달</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -262,7 +262,7 @@
<target state="translated">Verwijderen</target> <target state="translated">Verwijderen</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -314,7 +314,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1089827441260039381" datatype="html"> <trans-unit id="1089827441260039381" datatype="html">
@ -364,10 +364,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -418,7 +414,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -745,6 +741,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="5207635742003539443" datatype="html"> <trans-unit id="5207635742003539443" datatype="html">
<source>Sign in</source> <source>Sign in</source>
<target state="translated">Aanmelden</target> <target state="translated">Aanmelden</target>
@ -1086,7 +1090,7 @@
<target state="translated">YTD</target> <target state="translated">YTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1098,7 +1102,7 @@
<target state="translated">1J</target> <target state="translated">1J</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1110,7 +1114,7 @@
<target state="translated">5J</target> <target state="translated">5J</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1130,7 +1134,7 @@
<target state="translated">Max</target> <target state="translated">Max</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1318,7 +1322,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6780407325174304229" datatype="html"> <trans-unit id="6780407325174304229" datatype="html">
@ -1326,7 +1330,7 @@
<target state="translated">Locatie</target> <target state="translated">Locatie</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -1886,7 +1890,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2948175671993825247" datatype="html"> <trans-unit id="2948175671993825247" datatype="html">
@ -1982,7 +1986,7 @@
<target state="translated">Huidige week</target> <target state="translated">Huidige week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2210,7 +2214,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -2329,14 +2333,6 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Activiteiten importeren</target> <target state="translated">Activiteiten importeren</target>
@ -2665,6 +2661,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Aantal landen</target> <target state="translated">Aantal landen</target>
@ -2758,11 +2762,11 @@
<target state="translated">Het formulier kon niet worden gevalideerd.</target> <target state="translated">Het formulier kon niet worden gevalideerd.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -3217,6 +3221,14 @@
<context context-type="linenumber">166</context> <context context-type="linenumber">166</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Aantal activiteiten</target> <target state="translated">Aantal activiteiten</target>
@ -3413,14 +3425,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html"> <trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source> <source>Import Dividends</source>
<target state="translated">Importeer dividenden</target> <target state="translated">Importeer dividenden</target>
@ -3665,6 +3669,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Onbeperkte transacties</target> <target state="translated">Onbeperkte transacties</target>
@ -3749,6 +3761,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="7478722592449005806" datatype="html"> <trans-unit id="7478722592449005806" datatype="html">
<source>One-time payment, no auto-renewal.</source> <source>One-time payment, no auto-renewal.</source>
<target state="translated">Eenmalige betaling, geen automatische verlenging.</target> <target state="translated">Eenmalige betaling, geen automatische verlenging.</target>
@ -3762,11 +3782,11 @@
<target state="translated">Kon het assetprofiel niet opslaan</target> <target state="translated">Kon het assetprofiel niet opslaan</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -3990,7 +4010,7 @@
<target state="translated">Huidig jaar</target> <target state="translated">Huidig jaar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -4010,7 +4030,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -4026,7 +4046,7 @@
<target state="translated">Het activaprofiel is opgeslagen.</target> <target state="translated">Het activaprofiel is opgeslagen.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -4402,7 +4422,7 @@
<target state="translated">Scraper instellingen</target> <target state="translated">Scraper instellingen</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7504169991280318133" datatype="html"> <trans-unit id="7504169991280318133" datatype="html">
@ -4934,11 +4954,11 @@
<target state="translated">De scraperconfiguratie kon niet worden geparseerd</target> <target state="translated">De scraperconfiguratie kon niet worden geparseerd</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -5451,24 +5471,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Ben je op zoek naar een open source alternatief voor <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is een krachtige tool voor portefeuillebeheer die particulieren een uitgebreid platform biedt om hun beleggingen bij te houden, te analyseren en te optimaliseren. Of je nu een ervaren belegger bent of net begint, Ghostfolio biedt een intuïtieve gebruikersinterface en <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>uitgebreide functionaliteiten<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> om je te helpen weloverwogen beslissingen te nemen en je financiële toekomst in eigen handen te nemen.</target> <target state="translated">Ben je op zoek naar een open source alternatief voor <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is een krachtige tool voor portefeuillebeheer die particulieren een uitgebreid platform biedt om hun beleggingen bij te houden, te analyseren en te optimaliseren. Of je nu een ervaren belegger bent of net begint, Ghostfolio biedt een intuïtieve gebruikersinterface en <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>uitgebreide functionaliteiten<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> om je te helpen weloverwogen beslissingen te nemen en je financiële toekomst in eigen handen te nemen.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio is open source software (OSS) en biedt een kosteneffectief alternatief voor <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> waardoor het bijzonder geschikt is voor mensen met een krap budget, zoals degenen <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>Financiële onafhankelijkheid nastreven, vroeg met pensioen gaan (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Door gebruik te maken van de collectieve inspanningen van een gemeenschap van ontwikkelaars en liefhebbers van persoonlijke financiën, verbetert Ghostfolio voortdurend de mogelijkheden, veiligheid en gebruikerservaring.</target> <target state="translated">Ghostfolio is open source software (OSS) en biedt een kosteneffectief alternatief voor <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> waardoor het bijzonder geschikt is voor mensen met een krap budget, zoals degenen <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>Financiële onafhankelijkheid nastreven, vroeg met pensioen gaan (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Door gebruik te maken van de collectieve inspanningen van een gemeenschap van ontwikkelaars en liefhebbers van persoonlijke financiën, verbetert Ghostfolio voortdurend de mogelijkheden, veiligheid en gebruikerservaring.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Laten we eens dieper duiken in de gedetailleerde vergelijkingstabel hieronder om een beter begrip te krijgen hoe Ghostfolio zichzelf positioneert ten opzichte van <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We gaan in op verschillende aspecten zoals functies, gegevensprivacy, prijzen en meer, zodat je een weloverwogen keuze kunt maken voor jouw persoonlijke behoeften.</target> <target state="translated">Laten we eens dieper duiken in de gedetailleerde vergelijkingstabel hieronder om een beter begrip te krijgen hoe Ghostfolio zichzelf positioneert ten opzichte van <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We gaan in op verschillende aspecten zoals functies, gegevensprivacy, prijzen en meer, zodat je een weloverwogen keuze kunt maken voor jouw persoonlijke behoeften.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5488,8 +5508,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Houd er rekening mee dat de verstrekte informatie in deze Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> is gebaseerd op ons onafhankelijk onderzoek en analyse. Deze website is niet gelieerd aan <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> of een ander product dat in de vergelijking wordt genoemd. Aangezien het landschap van tools voor persoonlijke financiën evolueert, is het essentieel om specifieke details of wijzigingen rechtstreeks op de betreffende productpagina te controleren. Hebben je gegevens een opfrisbeurt nodig? Help ons de gegevens nauwkeurig te houden op <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Houd er rekening mee dat de verstrekte informatie in deze Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> is gebaseerd op ons onafhankelijk onderzoek en analyse. Deze website is niet gelieerd aan <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> of een ander product dat in de vergelijking wordt genoemd. Aangezien het landschap van tools voor persoonlijke financiën evolueert, is het essentieel om specifieke details of wijzigingen rechtstreeks op de betreffende productpagina te controleren. Hebben je gegevens een opfrisbeurt nodig? Help ons de gegevens nauwkeurig te houden op <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5508,7 +5528,7 @@
<target state="translated">Wereldwijd</target> <target state="translated">Wereldwijd</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5812,8 +5832,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> vergelijkingstabel</target> <target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> vergelijkingstabel</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5948,7 +5968,7 @@
<target state="translated">De huidige markt waarde is</target> <target state="translated">De huidige markt waarde is</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5956,7 +5976,7 @@
<target state="translated">Test</target> <target state="translated">Test</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6048,7 +6068,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6112,7 +6132,7 @@
<target state="translated">Week tot nu toe</target> <target state="translated">Week tot nu toe</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6132,7 +6152,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6180,7 +6200,7 @@
<target state="translated">jaar</target> <target state="translated">jaar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6200,7 +6220,7 @@
<target state="translated">jaren</target> <target state="translated">jaren</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6220,7 +6240,7 @@
<target state="translated">Data Verzamelen</target> <target state="translated">Data Verzamelen</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6280,6 +6300,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Oeps! Het lijkt er op dat u te veel verzoeken indient. Doe het iets rustiger aan alstublieft.</target> <target state="translated">Oeps! Het lijkt er op dat u te veel verzoeken indient. Doe het iets rustiger aan alstublieft.</target>
@ -6509,7 +6537,7 @@
<target state="translated">Alternatief</target> <target state="translated">Alternatief</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6517,7 +6545,7 @@
<target state="translated">App</target> <target state="translated">App</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6525,7 +6553,7 @@
<target state="translated">Budgetteren</target> <target state="translated">Budgetteren</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6585,7 +6613,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6601,7 +6629,7 @@
<target state="translated">Familiekantoor</target> <target state="translated">Familiekantoor</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6609,7 +6637,7 @@
<target state="translated">Investeerder</target> <target state="translated">Investeerder</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6621,7 +6649,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6633,7 +6661,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6641,7 +6669,7 @@
<target state="translated">Privacy</target> <target state="translated">Privacy</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6649,7 +6677,7 @@
<target state="translated">Software</target> <target state="translated">Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6657,7 +6685,7 @@
<target state="translated">Hulpmiddel</target> <target state="translated">Hulpmiddel</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6665,7 +6693,7 @@
<target state="translated">Gebruikers Ervaring</target> <target state="translated">Gebruikers Ervaring</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6673,7 +6701,7 @@
<target state="translated">Vermogen</target> <target state="translated">Vermogen</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6681,7 +6709,7 @@
<target state="translated">Vermogensbeheer</target> <target state="translated">Vermogensbeheer</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6705,7 +6733,7 @@
<target state="translated">Fout</target> <target state="translated">Fout</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6757,7 +6785,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6809,7 +6837,7 @@
<target state="translated">Sluiten</target> <target state="translated">Sluiten</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6837,7 +6865,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6985,8 +7013,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</target> <target state="new"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6997,8 +7025,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is geen Open Source Software</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is geen Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7033,8 +7061,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kan zelf gehost worden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kan zelf gehost worden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7053,8 +7081,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kan niet zelf gehost worden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kan niet zelf gehost worden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7065,8 +7093,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kan anoniem gebruikt worden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kan anoniem gebruikt worden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kan niet anoniem gebruik worden</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kan niet anoniem gebruik worden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> biedt een gratis abonnement aan</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> biedt een gratis abonnement aan</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> biedt geen gratis abonnement aan</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> biedt geen gratis abonnement aan</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7355,7 +7383,7 @@
<target state="translated">Opslaan</target> <target state="translated">Opslaan</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="translated">Lui</target> <target state="translated">Lui</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="translated">Direct</target> <target state="translated">Direct</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="translated">Standaard Marktprijs</target> <target state="translated">Standaard Marktprijs</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="translated">Modus</target> <target state="translated">Modus</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="translated">Kiezer</target> <target state="translated">Kiezer</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="translated">HTTP Verzoek Headers</target> <target state="translated">HTTP Verzoek Headers</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="translated">eind van de dag</target> <target state="translated">eind van de dag</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="translated">real-time</target> <target state="translated">real-time</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is al in gebruik.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is al in gebruik.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="translated">Er is een fout opgetreden tijdens het updaten naar <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="translated">Er is een fout opgetreden tijdens het updaten naar <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="translated">Huidige maand</target> <target state="translated">Huidige maand</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -539,7 +539,7 @@
<target state="translated">Usuń</target> <target state="translated">Usuń</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -591,7 +591,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3175281009707730014" datatype="html"> <trans-unit id="3175281009707730014" datatype="html">
@ -611,7 +611,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -653,10 +653,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -838,6 +834,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Liczba Aktywności</target> <target state="translated">Liczba Aktywności</target>
@ -866,6 +870,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Liczba Krajów</target> <target state="translated">Liczba Krajów</target>
@ -1031,7 +1043,7 @@
<target state="translated">Konfiguracja Scrapera</target> <target state="translated">Konfiguracja Scrapera</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1251,7 +1263,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1267,7 +1279,7 @@
<target state="translated">Profil zasobu został zapisany</target> <target state="translated">Profil zasobu został zapisany</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -1307,7 +1319,7 @@
<target state="translated">Obecny rok</target> <target state="translated">Obecny rok</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1447,11 +1459,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1487,7 +1499,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1703,7 +1715,7 @@
<target state="translated">Obecny tydzień</target> <target state="translated">Obecny tydzień</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2187,7 +2199,7 @@
<target state="translated">Liczony od początku roku (year-to-date)</target> <target state="translated">Liczony od początku roku (year-to-date)</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2199,7 +2211,7 @@
<target state="translated">1 rok</target> <target state="translated">1 rok</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2211,7 +2223,7 @@
<target state="translated">5 lat</target> <target state="translated">5 lat</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2231,7 +2243,7 @@
<target state="translated">Maksimum</target> <target state="translated">Maksimum</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2395,7 +2407,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -2411,7 +2423,7 @@
<target state="translated">Ustawienia Regionalne</target> <target state="translated">Ustawienia Regionalne</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -2995,11 +3007,11 @@
<target state="translated">Nie udało się przetworzyć konfiguracji scrapera</target> <target state="translated">Nie udało się przetworzyć konfiguracji scrapera</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -3202,6 +3214,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<target state="translated">Inwestycje</target> <target state="translated">Inwestycje</target>
@ -3886,14 +3906,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Importuj Aktywności</target> <target state="translated">Importuj Aktywności</target>
@ -4143,7 +4155,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -4310,14 +4322,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="6293970137138896363" datatype="html"> <trans-unit id="6293970137138896363" datatype="html">
<source>Top</source> <source>Top</source>
<target state="translated">Największe wzrosty</target> <target state="translated">Największe wzrosty</target>
@ -4454,6 +4458,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Nieograniczona Liczba Transakcji</target> <target state="translated">Nieograniczona Liczba Transakcji</target>
@ -4558,6 +4570,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<target state="translated">Wsparcie przez E-mail i Czat</target> <target state="translated">Wsparcie przez E-mail i Czat</target>
@ -4595,11 +4615,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -4740,24 +4760,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Szukasz alternatywy typu open source dla <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to potężne narzędzie do zarządzania portfelem, które zapewnia osobom fizycznym kompleksową platformę do śledzenia, analizowania i optymalizacji ich inwestycji. Niezależnie od tego, czy jesteś doświadczonym inwestorem, czy dopiero zaczynasz, Ghostfolio oferuje intuicyjny interfejs użytkownika i <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>szeroki zakres funkcjonalności<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>, które pomogą Ci podejmować przemyślane decyzje i przejąć kontrolę nad swoją finansową przyszłością.</target> <target state="translated">Szukasz alternatywy typu open source dla <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to potężne narzędzie do zarządzania portfelem, które zapewnia osobom fizycznym kompleksową platformę do śledzenia, analizowania i optymalizacji ich inwestycji. Niezależnie od tego, czy jesteś doświadczonym inwestorem, czy dopiero zaczynasz, Ghostfolio oferuje intuicyjny interfejs użytkownika i <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>szeroki zakres funkcjonalności<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>, które pomogą Ci podejmować przemyślane decyzje i przejąć kontrolę nad swoją finansową przyszłością.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio to oprogramowanie o otwartym kodzie źródłowym (OSS), stanowiące opłacalną alternatywę dla <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>, czyniąc go szczególnie odpowiednim dla osób o ograniczonym budżecie, takich jak osoby <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>dążące do finansowej niezależności i wcześniejszej emerytury (Financial Independence, Retire Early - FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Wykorzystując wspólne wysiłki społeczności programistów i entuzjastów finansów osobistych, Ghostfolio stale zwiększa swoje możliwości, bezpieczeństwo i komfort użytkowania.</target> <target state="translated">Ghostfolio to oprogramowanie o otwartym kodzie źródłowym (OSS), stanowiące opłacalną alternatywę dla <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>, czyniąc go szczególnie odpowiednim dla osób o ograniczonym budżecie, takich jak osoby <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>dążące do finansowej niezależności i wcześniejszej emerytury (Financial Independence, Retire Early - FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Wykorzystując wspólne wysiłki społeczności programistów i entuzjastów finansów osobistych, Ghostfolio stale zwiększa swoje możliwości, bezpieczeństwo i komfort użytkowania.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Zagłębmy się w szczegółową tabelę porównawczą Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> poniżej, aby dokładnie zrozumieć, jak Ghostfolio pozycjonuje się w stosunku do <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Przeanalizujemy różne aspekty, takie jak funkcje, prywatność danych, opłaty i inne, umożliwiając Tobie dokonanie przemyślanego wyboru pod kątem osobistych wymagań.</target> <target state="translated">Zagłębmy się w szczegółową tabelę porównawczą Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> poniżej, aby dokładnie zrozumieć, jak Ghostfolio pozycjonuje się w stosunku do <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Przeanalizujemy różne aspekty, takie jak funkcje, prywatność danych, opłaty i inne, umożliwiając Tobie dokonanie przemyślanego wyboru pod kątem osobistych wymagań.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -4776,8 +4796,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> - tabela porównawcza</target> <target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> - tabela porównawcza</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -4928,8 +4948,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Należy pamiętać, że informacje zawarte w tabeli porównawczej Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> są oparte na naszych niezależnych badaniach i analizach. Ta strona internetowa nie jest powiązana z <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> ani żadnym innym produktem wymienionym w porównaniu. Ponieważ krajobraz narzędzi do finansów osobistych ewoluuje, ważne jest, aby weryfikować wszelkie szczegóły lub zmiany bezpośrednio na stronie danego produktu. Informacje wymagają aktualizacji? Pomóż nam utrzymywać dokładne dane na <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Należy pamiętać, że informacje zawarte w tabeli porównawczej Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> są oparte na naszych niezależnych badaniach i analizach. Ta strona internetowa nie jest powiązana z <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> ani żadnym innym produktem wymienionym w porównaniu. Ponieważ krajobraz narzędzi do finansów osobistych ewoluuje, ważne jest, aby weryfikować wszelkie szczegóły lub zmiany bezpośrednio na stronie danego produktu. Informacje wymagają aktualizacji? Pomóż nam utrzymywać dokładne dane na <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -4956,7 +4976,7 @@
<target state="translated">Globalny</target> <target state="translated">Globalny</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5948,7 +5968,7 @@
<target state="translated">Obecna cena rynkowa wynosi</target> <target state="translated">Obecna cena rynkowa wynosi</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5956,7 +5976,7 @@
<target state="translated">Test</target> <target state="translated">Test</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6048,7 +6068,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6112,7 +6132,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6132,7 +6152,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6180,7 +6200,7 @@
<target state="translated">rok</target> <target state="translated">rok</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6200,7 +6220,7 @@
<target state="translated">lata</target> <target state="translated">lata</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6220,7 +6240,7 @@
<target state="translated">Gromadzenie Danych</target> <target state="translated">Gromadzenie Danych</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6280,6 +6300,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Ups! Wygląda na to, że wykonujesz zbyt wiele zapytań. Proszę, zwolnij trochę.</target> <target state="translated">Ups! Wygląda na to, że wykonujesz zbyt wiele zapytań. Proszę, zwolnij trochę.</target>
@ -6509,7 +6537,7 @@
<target state="translated">Alternatywa</target> <target state="translated">Alternatywa</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6517,7 +6545,7 @@
<target state="translated">Aplikacja</target> <target state="translated">Aplikacja</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6525,7 +6553,7 @@
<target state="translated">Budżetowanie</target> <target state="translated">Budżetowanie</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6585,7 +6613,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6601,7 +6629,7 @@
<target state="translated">Biuro Rodzinne</target> <target state="translated">Biuro Rodzinne</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6609,7 +6637,7 @@
<target state="translated">Inwestor</target> <target state="translated">Inwestor</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6621,7 +6649,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6633,7 +6661,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6641,7 +6669,7 @@
<target state="translated">Prywatność</target> <target state="translated">Prywatność</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6649,7 +6677,7 @@
<target state="translated">Oprogramowanie</target> <target state="translated">Oprogramowanie</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6657,7 +6685,7 @@
<target state="translated">Narzędzie</target> <target state="translated">Narzędzie</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6665,7 +6693,7 @@
<target state="translated">Doświadczenie Użytkownika</target> <target state="translated">Doświadczenie Użytkownika</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6673,7 +6701,7 @@
<target state="translated">Majątek</target> <target state="translated">Majątek</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6681,7 +6709,7 @@
<target state="translated">Zarządzanie Majątkiem</target> <target state="translated">Zarządzanie Majątkiem</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6705,7 +6733,7 @@
<target state="translated">Błąd</target> <target state="translated">Błąd</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6757,7 +6785,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6809,7 +6837,7 @@
<target state="translated">Zamknij</target> <target state="translated">Zamknij</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6837,7 +6865,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6985,8 +7013,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> jest Oprogramowaniem Open Source</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> jest Oprogramowaniem Open Source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6997,8 +7025,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> nie jest Oprogramowaniem Open Source</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> nie jest Oprogramowaniem Open Source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7033,8 +7061,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> może być hostowana samodzielnie</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> może być hostowana samodzielnie</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7053,8 +7081,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> nie może być hostowany samodzielnie</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> nie może być hostowany samodzielnie</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7065,8 +7093,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> może być używana anonimowo</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> może być używana anonimowo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> nie może być używana anonimowo</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> nie może być używana anonimowo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> oferuje darmowy plan</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> oferuje darmowy plan</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> nie oferuje darmowego planu</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> nie oferuje darmowego planu</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7355,7 +7383,7 @@
<target state="translated">Zapisz</target> <target state="translated">Zapisz</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="translated">Leniwy</target> <target state="translated">Leniwy</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="translated">Natychmiastowy</target> <target state="translated">Natychmiastowy</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="translated">Domyślna cena rynkowa</target> <target state="translated">Domyślna cena rynkowa</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="translated">Tryb</target> <target state="translated">Tryb</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="translated">Selektor</target> <target state="translated">Selektor</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="translated">Nagłówki żądań HTTP</target> <target state="translated">Nagłówki żądań HTTP</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="translated">koniec dnia</target> <target state="translated">koniec dnia</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="translated">w czasie rzeczywistym</target> <target state="translated">w czasie rzeczywistym</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) jest już w użyciu.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) jest już w użyciu.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="translated">Wystąpił błąd podczas aktualizacji do <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="translated">Wystąpił błąd podczas aktualizacji do <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="translated">Bieżący miesiąc</target> <target state="translated">Bieżący miesiąc</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -318,7 +318,7 @@
<target state="translated">Eliminar</target> <target state="translated">Eliminar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -370,7 +370,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -412,10 +412,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -474,7 +470,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -609,6 +605,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="5274897475180636586" datatype="html"> <trans-unit id="5274897475180636586" datatype="html">
<source>Gather Profile Data</source> <source>Gather Profile Data</source>
<target state="translated">Recolher Dados de Perfíl</target> <target state="translated">Recolher Dados de Perfíl</target>
@ -778,11 +782,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -810,7 +814,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1338,7 +1342,7 @@
<target state="translated">AATD</target> <target state="translated">AATD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1350,7 +1354,7 @@
<target state="translated">1A</target> <target state="translated">1A</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1362,7 +1366,7 @@
<target state="translated">5A</target> <target state="translated">5A</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1382,7 +1386,7 @@
<target state="translated">Máx</target> <target state="translated">Máx</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -1618,7 +1622,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -1646,7 +1650,7 @@
<target state="translated">Localidade</target> <target state="translated">Localidade</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -2150,7 +2154,7 @@
<target state="new">Current week</target> <target state="new">Current week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2382,7 +2386,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -2633,6 +2637,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="8298333184054476827" datatype="html"> <trans-unit id="8298333184054476827" datatype="html">
<source>Registration</source> <source>Registration</source>
<target state="translated">Registo</target> <target state="translated">Registo</target>
@ -2741,14 +2753,6 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Importar Atividades</target> <target state="translated">Importar Atividades</target>
@ -3229,6 +3233,14 @@
<context context-type="linenumber">186</context> <context context-type="linenumber">186</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Nº de Atividades</target> <target state="translated">Nº de Atividades</target>
@ -3413,14 +3425,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="72640258012696878" datatype="html"> <trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source> <source>Import Dividends</source>
<target state="translated">Importar Dividendos</target> <target state="translated">Importar Dividendos</target>
@ -3665,6 +3669,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Transações Ilimitadas</target> <target state="translated">Transações Ilimitadas</target>
@ -3749,6 +3761,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="7478722592449005806" datatype="html"> <trans-unit id="7478722592449005806" datatype="html">
<source>One-time payment, no auto-renewal.</source> <source>One-time payment, no auto-renewal.</source>
<target state="translated">Pagamento único, sem renovação automática.</target> <target state="translated">Pagamento único, sem renovação automática.</target>
@ -3762,11 +3782,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -3990,7 +4010,7 @@
<target state="new">Current year</target> <target state="new">Current year</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -4010,7 +4030,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -4026,7 +4046,7 @@
<target state="new">Asset profile has been saved</target> <target state="new">Asset profile has been saved</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -4402,7 +4422,7 @@
<target state="translated">Configuração do raspador</target> <target state="translated">Configuração do raspador</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7504169991280318133" datatype="html"> <trans-unit id="7504169991280318133" datatype="html">
@ -4934,11 +4954,11 @@
<target state="new">Could not parse scraper configuration</target> <target state="new">Could not parse scraper configuration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -5451,24 +5471,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Você está procurando uma alternativa de código aberto para <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> é uma poderosa ferramenta de gestão de portfólio que oferece aos investidores uma plataforma abrangente para monitorar, analisar e otimizar seus investimentos. Seja você um investidor experiente ou iniciante, o Ghostfolio oferece uma interface de usuário intuitiva e um <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>ampla gama de funcionalidades<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> para ajudá-lo a tomar decisões informadas e assumir o controle do seu futuro financeiro.</target> <target state="translated">Você está procurando uma alternativa de código aberto para <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> é uma poderosa ferramenta de gestão de portfólio que oferece aos investidores uma plataforma abrangente para monitorar, analisar e otimizar seus investimentos. Seja você um investidor experiente ou iniciante, o Ghostfolio oferece uma interface de usuário intuitiva e um <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>ampla gama de funcionalidades<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> para ajudá-lo a tomar decisões informadas e assumir o controle do seu futuro financeiro.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio é um software de código aberto (OSS), que oferece uma alternativa econômica para <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> tornando-o particularmente adequado para indivíduos com orçamento apertado, como aqueles <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>buscando Independência Financeira, Aposentadoria Antecipada (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Ao aproveitar os esforços coletivos de uma comunidade de desenvolvedores e entusiastas de finanças pessoais, o Ghostfolio aprimora continuamente seus recursos, segurança e experiência do usuário.</target> <target state="translated">Ghostfolio é um software de código aberto (OSS), que oferece uma alternativa econômica para <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> tornando-o particularmente adequado para indivíduos com orçamento apertado, como aqueles <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>buscando Independência Financeira, Aposentadoria Antecipada (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Ao aproveitar os esforços coletivos de uma comunidade de desenvolvedores e entusiastas de finanças pessoais, o Ghostfolio aprimora continuamente seus recursos, segurança e experiência do usuário.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Vamos nos aprofundar nos detalhes do Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> tabela de comparação abaixo para obter uma compreensão completa de como o Ghostfolio se posiciona em relação a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Exploraremos vários aspectos, como recursos, privacidade de dados, preços e muito mais, permitindo que você faça uma escolha bem informada para suas necessidades pessoais.</target> <target state="translated">Vamos nos aprofundar nos detalhes do Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> tabela de comparação abaixo para obter uma compreensão completa de como o Ghostfolio se posiciona em relação a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Exploraremos vários aspectos, como recursos, privacidade de dados, preços e muito mais, permitindo que você faça uma escolha bem informada para suas necessidades pessoais.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5488,8 +5508,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Observe que as informações fornecidas no Ghostfolio vs. <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> A tabela de comparação é baseada em nossa pesquisa e análise independentes. Este site não é afiliado a <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> ou qualquer outro produto mencionado na comparação. À medida que o cenário das ferramentas de finanças pessoais evolui, é essencial verificar quaisquer detalhes ou alterações específicas diretamente na página do produto correspondente. Os dados precisam de uma atualização? Ajude-nos a manter dados precisos sobre <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Observe que as informações fornecidas no Ghostfolio vs. <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> A tabela de comparação é baseada em nossa pesquisa e análise independentes. Este site não é afiliado a <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> ou qualquer outro produto mencionado na comparação. À medida que o cenário das ferramentas de finanças pessoais evolui, é essencial verificar quaisquer detalhes ou alterações específicas diretamente na página do produto correspondente. Os dados precisam de uma atualização? Ajude-nos a manter dados precisos sobre <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -5508,7 +5528,7 @@
<target state="translated">Global</target> <target state="translated">Global</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5812,8 +5832,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> tabela de comparação</target> <target state="translated">Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> tabela de comparação</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5948,7 +5968,7 @@
<target state="translated">O preço de mercado atual é</target> <target state="translated">O preço de mercado atual é</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5956,7 +5976,7 @@
<target state="translated">Teste</target> <target state="translated">Teste</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6048,7 +6068,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6112,7 +6132,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6132,7 +6152,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6180,7 +6200,7 @@
<target state="translated">ano</target> <target state="translated">ano</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6200,7 +6220,7 @@
<target state="translated">anos</target> <target state="translated">anos</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6220,7 +6240,7 @@
<target state="translated">Coleta de dados</target> <target state="translated">Coleta de dados</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6280,6 +6300,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Ops! Parece que você está fazendo muitas solicitações. Por favor, diminua um pouco a velocidade.</target> <target state="translated">Ops! Parece que você está fazendo muitas solicitações. Por favor, diminua um pouco a velocidade.</target>
@ -6509,7 +6537,7 @@
<target state="translated">Alternativo</target> <target state="translated">Alternativo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6517,7 +6545,7 @@
<target state="translated">Aplicativo</target> <target state="translated">Aplicativo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6525,7 +6553,7 @@
<target state="translated">Orçamento</target> <target state="translated">Orçamento</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6585,7 +6613,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6601,7 +6629,7 @@
<target state="translated">Escritório Familiar</target> <target state="translated">Escritório Familiar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6609,7 +6637,7 @@
<target state="translated">Investidor</target> <target state="translated">Investidor</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6621,7 +6649,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6633,7 +6661,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6641,7 +6669,7 @@
<target state="translated">Privacidade</target> <target state="translated">Privacidade</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6649,7 +6677,7 @@
<target state="translated">Programas</target> <target state="translated">Programas</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6657,7 +6685,7 @@
<target state="translated">Ferramenta</target> <target state="translated">Ferramenta</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6665,7 +6693,7 @@
<target state="translated">Experiência do usuário</target> <target state="translated">Experiência do usuário</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6673,7 +6701,7 @@
<target state="translated">Fortuna</target> <target state="translated">Fortuna</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6681,7 +6709,7 @@
<target state="translated">Gestão de patrimônio</target> <target state="translated">Gestão de patrimônio</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6705,7 +6733,7 @@
<target state="translated">Erro</target> <target state="translated">Erro</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6757,7 +6785,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6809,7 +6837,7 @@
<target state="translated">Fechar</target> <target state="translated">Fechar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6837,7 +6865,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6985,8 +7013,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> é software de código aberto</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> é software de código aberto</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6997,8 +7025,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> não é software de código aberto</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> não é software de código aberto</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7033,8 +7061,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> pode ser auto-hospedado</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> pode ser auto-hospedado</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7053,8 +7081,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> não pode ser auto-hospedado</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> não pode ser auto-hospedado</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7065,8 +7093,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> pode ser usado anonimamente</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> pode ser usado anonimamente</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> não pode ser usado anonimamente</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> não pode ser usado anonimamente</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> oferece um plano gratuito</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> oferece um plano gratuito</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> não oferece um plano gratuito</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> não oferece um plano gratuito</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7355,7 +7383,7 @@
<target state="translated">Guardar</target> <target state="translated">Guardar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="new">Lazy</target> <target state="new">Lazy</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="new">Instant</target> <target state="new">Instant</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="translated">Preço de mercado padrão</target> <target state="translated">Preço de mercado padrão</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="new">Mode</target> <target state="new">Mode</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="new">Selector</target> <target state="new">Selector</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="new">HTTP Request Headers</target> <target state="new">HTTP Request Headers</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="new">end of day</target> <target state="new">end of day</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="new">real-time</target> <target state="new">real-time</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target> <target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="new">Current month</target> <target state="new">Current month</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -499,7 +499,7 @@
<target state="translated">Sil</target> <target state="translated">Sil</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -551,7 +551,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -593,10 +593,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -655,7 +651,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2505231537574917205" datatype="html"> <trans-unit id="2505231537574917205" datatype="html">
@ -790,6 +786,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">İşlem Sayısı</target> <target state="translated">İşlem Sayısı</target>
@ -818,6 +822,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Ülke Sayısı</target> <target state="translated">Ülke Sayısı</target>
@ -951,7 +963,7 @@
<target state="translated">Veri Toplayıcı Yapılandırması</target> <target state="translated">Veri Toplayıcı Yapılandırması</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1147,7 +1159,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1163,7 +1175,7 @@
<target state="new">Asset profile has been saved</target> <target state="new">Asset profile has been saved</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -1203,7 +1215,7 @@
<target state="new">Current year</target> <target state="new">Current year</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1295,11 +1307,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1335,7 +1347,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1551,7 +1563,7 @@
<target state="new">Current week</target> <target state="new">Current week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2035,7 +2047,7 @@
<target state="translated">YTD</target> <target state="translated">YTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2047,7 +2059,7 @@
<target state="trasnlated">1Y</target> <target state="trasnlated">1Y</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2059,7 +2071,7 @@
<target state="translated">5Y</target> <target state="translated">5Y</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2079,7 +2091,7 @@
<target state="translated">Maks.</target> <target state="translated">Maks.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2515,11 +2527,11 @@
<target state="new">Could not parse scraper configuration</target> <target state="new">Could not parse scraper configuration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -2734,6 +2746,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<target state="translated">Varlıklar</target> <target state="translated">Varlıklar</target>
@ -3318,14 +3338,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">İşlemleri İçe Aktar</target> <target state="translated">İşlemleri İçe Aktar</target>
@ -3583,7 +3595,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -3750,14 +3762,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="6293970137138896363" datatype="html"> <trans-unit id="6293970137138896363" datatype="html">
<source>Top</source> <source>Top</source>
<target state="translated">Üst</target> <target state="translated">Üst</target>
@ -3894,6 +3898,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Sınırsız İşlem</target> <target state="translated">Sınırsız İşlem</target>
@ -3998,6 +4010,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<target state="translated">E-posta ve Sohbet Desteği</target> <target state="translated">E-posta ve Sohbet Desteği</target>
@ -4035,11 +4055,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -4200,24 +4220,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Açık kaynaklı bir alternatif mi arıyorsunuz <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> güçlü bir portföy yönetim aracıdır ve bireylere yatırımlarını takip etmek, analiz etmek ve optimize etmek için kapsamlı bir platform sunar. İster deneyimli bir yatırımcı olun ister yeni başlıyor olun, Ghostfolio, bilinçli kararlar almanıza ve finansal geleceğinizi kontrol etmenize yardımcı olmak için sezgisel bir kullanıcı arayüzü ve <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>geniş bir işlevsellik yelpazesi<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> sunmaktadır.</target> <target state="translated">Açık kaynaklı bir alternatif mi arıyorsunuz <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> güçlü bir portföy yönetim aracıdır ve bireylere yatırımlarını takip etmek, analiz etmek ve optimize etmek için kapsamlı bir platform sunar. İster deneyimli bir yatırımcı olun ister yeni başlıyor olun, Ghostfolio, bilinçli kararlar almanıza ve finansal geleceğinizi kontrol etmenize yardımcı olmak için sezgisel bir kullanıcı arayüzü ve <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>geniş bir işlevsellik yelpazesi<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> sunmaktadır.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio, <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> karşısında açık kaynak kodlu maliyet etkin bir seçenek sunmaktadır. <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/> gibi kısıtlı bütçeye sahip, finansal özgürlük ve erken emeklilik (FIRE) amaçlayan kulanıcılar için özellikle uygundur. <x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> Ghostfolio, topluluk içindeki geliştiricilerin ve kişisel finans meraklılarının kolektif çabası sayesinde yeteneklerini, güvenliğini ve kullanıcı deneyimini sürekli olarak geliştirmektedir.</target> <target state="translated">Ghostfolio, <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> karşısında açık kaynak kodlu maliyet etkin bir seçenek sunmaktadır. <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/> gibi kısıtlı bütçeye sahip, finansal özgürlük ve erken emeklilik (FIRE) amaçlayan kulanıcılar için özellikle uygundur. <x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> Ghostfolio, topluluk içindeki geliştiricilerin ve kişisel finans meraklılarının kolektif çabası sayesinde yeteneklerini, güvenliğini ve kullanıcı deneyimini sürekli olarak geliştirmektedir.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Ghostfolio ve <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> arasındaki ayrıntılı karşılaştırmanın yer aldığı aşağıdaki tabloya daha yakından bakarak Ghostfolio’nun <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> karşısında kendisini nasıl konumlandırdığını kapsamlı bir şekilde değerlendirelim. Bu kapsamda özellikler, veri güvenliği, fiyat vb. hususları inceleyerek kişisel gereksinimleriniz için bilgiye dayalı bir seçim yapmanızı sağlayabileceği.</target> <target state="translated">Ghostfolio ve <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> arasındaki ayrıntılı karşılaştırmanın yer aldığı aşağıdaki tabloya daha yakından bakarak Ghostfolio’nun <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> karşısında kendisini nasıl konumlandırdığını kapsamlı bir şekilde değerlendirelim. Bu kapsamda özellikler, veri güvenliği, fiyat vb. hususları inceleyerek kişisel gereksinimleriniz için bilgiye dayalı bir seçim yapmanızı sağlayabileceği.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -4368,8 +4388,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Lütfen dikkat, Ghostfolio ve <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> arasındaki karşılaştırmanın yer aldığı tablodaki bilgiler bağımsız araştırmalarımıza dayanmaktadır. Websitemizin <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> ile ya da bu karşılaştırmada adı geçen herhangi bir ürün ve hizmet ile ilişkisi bulunmamaktadır. Kişisel finans araçlarının kapsamı geliştikçe, belirli ayrıntıların veya değişikliklerin doğrudan ilgili ürün sayfasından doğrulanması önemlidir. Verilerin yenilenmesi mi gerekiyor? Doğru verileri sağlamamıza yardımcı olmak için sayfamızı ziyaret edin. <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Lütfen dikkat, Ghostfolio ve <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> arasındaki karşılaştırmanın yer aldığı tablodaki bilgiler bağımsız araştırmalarımıza dayanmaktadır. Websitemizin <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> ile ya da bu karşılaştırmada adı geçen herhangi bir ürün ve hizmet ile ilişkisi bulunmamaktadır. Kişisel finans araçlarının kapsamı geliştikçe, belirli ayrıntıların veya değişikliklerin doğrudan ilgili ürün sayfasından doğrulanması önemlidir. Verilerin yenilenmesi mi gerekiyor? Doğru verileri sağlamamıza yardımcı olmak için sayfamızı ziyaret edin. <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -4396,7 +4416,7 @@
<target state="translated">Küresel</target> <target state="translated">Küresel</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -4600,7 +4620,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -4616,7 +4636,7 @@
<target state="translated">Yerel Ayarlar</target> <target state="translated">Yerel Ayarlar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -5812,8 +5832,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio ve <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> karşılatırma tablosu</target> <target state="translated">Ghostfolio ve <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> karşılatırma tablosu</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5948,7 +5968,7 @@
<target state="translated">Şu anki piyasa fiyatı</target> <target state="translated">Şu anki piyasa fiyatı</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5956,7 +5976,7 @@
<target state="translated">Test</target> <target state="translated">Test</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6483680626836794824" datatype="html"> <trans-unit id="6483680626836794824" datatype="html">
@ -6048,7 +6068,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6112,7 +6132,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6132,7 +6152,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6180,7 +6200,7 @@
<target state="translated">Yıl</target> <target state="translated">Yıl</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6200,7 +6220,7 @@
<target state="translated">Yıllar</target> <target state="translated">Yıllar</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6220,7 +6240,7 @@
<target state="translated">Veri Toplama</target> <target state="translated">Veri Toplama</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6280,6 +6300,14 @@
<context context-type="linenumber">246</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Oops! Görünüşe göre çok fazla istekte bulunuyorsunuz. Lütfen biraz yavaşlayın.</target> <target state="translated">Oops! Görünüşe göre çok fazla istekte bulunuyorsunuz. Lütfen biraz yavaşlayın.</target>
@ -6509,7 +6537,7 @@
<target state="translated">Alternatif</target> <target state="translated">Alternatif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6517,7 +6545,7 @@
<target state="translated">App</target> <target state="translated">App</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6525,7 +6553,7 @@
<target state="translated">Bütçeleme</target> <target state="translated">Bütçeleme</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6585,7 +6613,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6601,7 +6629,7 @@
<target state="translated">Aile Ofisi</target> <target state="translated">Aile Ofisi</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6609,7 +6637,7 @@
<target state="translated">Yatırımcı</target> <target state="translated">Yatırımcı</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6621,7 +6649,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6633,7 +6661,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6641,7 +6669,7 @@
<target state="translated">Gizlilik</target> <target state="translated">Gizlilik</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6649,7 +6677,7 @@
<target state="translated">Yazılım</target> <target state="translated">Yazılım</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6657,7 +6685,7 @@
<target state="translated">Araç</target> <target state="translated">Araç</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6665,7 +6693,7 @@
<target state="translated">Kullanıcı Deneyimi</target> <target state="translated">Kullanıcı Deneyimi</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6673,7 +6701,7 @@
<target state="translated">Zenginlik</target> <target state="translated">Zenginlik</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6681,7 +6709,7 @@
<target state="translated">Zenginlik Yönetimi</target> <target state="translated">Zenginlik Yönetimi</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6705,7 +6733,7 @@
<target state="translated">Hata</target> <target state="translated">Hata</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6757,7 +6785,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6809,7 +6837,7 @@
<target state="translated">Kapat</target> <target state="translated">Kapat</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6837,7 +6865,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6985,8 +7013,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>, Açık Kaynak Kodlu Yazılımdır</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>, Açık Kaynak Kodlu Yazılımdır</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6997,8 +7025,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/>, Açık Kaynak Kodlu Yazılımdır</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/>, Açık Kaynak Kodlu Yazılımdır</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7033,8 +7061,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kendi sunucunuzda barındırılabilir</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kendi sunucunuzda barındırılabilir</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7053,8 +7081,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> kendi sunucunuzda barındırılmaz</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> kendi sunucunuzda barındırılmaz</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7065,8 +7093,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> gizli kullanımda kullanılabilir</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> gizli kullanımda kullanılabilir</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7077,8 +7105,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> gizli kullanımda kullanılmaz</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> gizli kullanımda kullanılmaz</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7089,8 +7117,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ücretsiz plan sunar</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ücretsiz plan sunar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7101,8 +7129,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> ücretsiz plan sunmaz</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> ücretsiz plan sunmaz</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7355,7 +7383,7 @@
<target state="translated">Kaydet</target> <target state="translated">Kaydet</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="translated">Tembel</target> <target state="translated">Tembel</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="translated">Anında</target> <target state="translated">Anında</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="translated">Varsayılan Piyasa Fiyatı</target> <target state="translated">Varsayılan Piyasa Fiyatı</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="translated">Mod</target> <target state="translated">Mod</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="translated">Seçici</target> <target state="translated">Seçici</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="translated">HTTP İstek Başlıkları</target> <target state="translated">HTTP İstek Başlıkları</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="translated">gün sonu</target> <target state="translated">gün sonu</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="translated">gerçek zamanlı</target> <target state="translated">gerçek zamanlı</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="translated">Güncelleştirilirken bir hata oluştu <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="translated">Güncelleştirilirken bir hata oluştu <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="new">Current month</target> <target state="new">Current month</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -623,7 +623,7 @@
<target state="translated">Видалити</target> <target state="translated">Видалити</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -675,7 +675,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8650499415827640724" datatype="html"> <trans-unit id="8650499415827640724" datatype="html">
@ -723,7 +723,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="288029731436334434" datatype="html"> <trans-unit id="288029731436334434" datatype="html">
@ -781,10 +781,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -934,6 +930,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Кількість активностей</target> <target state="translated">Кількість активностей</target>
@ -962,6 +966,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">Кількість країн</target> <target state="translated">Кількість країн</target>
@ -1007,7 +1019,7 @@
<target state="translated">Помилка</target> <target state="translated">Помилка</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4405333887341433096" datatype="html"> <trans-unit id="4405333887341433096" datatype="html">
@ -1015,7 +1027,7 @@
<target state="translated">Поточна ринкова ціна</target> <target state="translated">Поточна ринкова ціна</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1102717806459547726" datatype="html"> <trans-unit id="1102717806459547726" datatype="html">
@ -1131,7 +1143,7 @@
<target state="translated">Конфігурація скребка</target> <target state="translated">Конфігурація скребка</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -1139,7 +1151,7 @@
<target state="translated">Тест</target> <target state="translated">Тест</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8308045076391224954" datatype="html"> <trans-unit id="8308045076391224954" datatype="html">
@ -1151,7 +1163,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1167,7 +1179,7 @@
<target state="new">Asset profile has been saved</target> <target state="new">Asset profile has been saved</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1331,7 +1343,7 @@
<target state="translated">Збір даних</target> <target state="translated">Збір даних</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -1443,7 +1455,7 @@
<target state="new">Current year</target> <target state="new">Current year</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1707,11 +1719,11 @@
<target state="new">Could not validate form</target> <target state="new">Could not validate form</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1747,7 +1759,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -2111,7 +2123,7 @@
<target state="new">Current week</target> <target state="new">Current week</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2331,7 +2343,7 @@
<target state="translated">Зберегти</target> <target state="translated">Зберегти</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -2611,7 +2623,7 @@
<target state="translated">З початку року</target> <target state="translated">З початку року</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2623,7 +2635,7 @@
<target state="translated">1 рік</target> <target state="translated">1 рік</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2635,7 +2647,7 @@
<target state="translated">5 років</target> <target state="translated">5 років</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2655,7 +2667,7 @@
<target state="translated">Максимум</target> <target state="translated">Максимум</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2959,7 +2971,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -2983,7 +2995,7 @@
<target state="translated">Локалізація</target> <target state="translated">Локалізація</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -3150,6 +3162,14 @@
<context context-type="linenumber">190</context> <context context-type="linenumber">190</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">Упс! Здається, ви робите занадто багато запитів. Будь ласка, пригальмуй трохи.</target> <target state="translated">Упс! Здається, ви робите занадто багато запитів. Будь ласка, пригальмуй трохи.</target>
@ -3587,11 +3607,11 @@
<target state="new">Could not parse scraper configuration</target> <target state="new">Could not parse scraper configuration</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -3819,6 +3839,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<target state="translated">Активи</target> <target state="translated">Активи</target>
@ -4539,14 +4567,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">Імпортувати активності</target> <target state="translated">Імпортувати активності</target>
@ -4812,7 +4832,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -4984,7 +5004,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -5011,14 +5031,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="1600023202562292052" datatype="html"> <trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source> <source>Close Holding</source>
<target state="new">Close Holding</target> <target state="new">Close Holding</target>
@ -5235,6 +5247,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">Необмежені транзакції</target> <target state="translated">Необмежені транзакції</target>
@ -5339,6 +5359,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<target state="translated">Підтримка електронної пошти та чату</target> <target state="translated">Підтримка електронної пошти та чату</target>
@ -5360,11 +5388,11 @@
<target state="new">Could not save asset profile</target> <target state="new">Could not save asset profile</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -5595,7 +5623,7 @@
<target state="translated">Глобальний</target> <target state="translated">Глобальний</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5607,7 +5635,7 @@
<target state="translated">Альтернатива</target> <target state="translated">Альтернатива</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -5615,7 +5643,7 @@
<target state="translated">Додаток</target> <target state="translated">Додаток</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -5623,7 +5651,7 @@
<target state="translated">Бюджетування</target> <target state="translated">Бюджетування</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -5683,7 +5711,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -5699,7 +5727,7 @@
<target state="translated">Сімейний офіс</target> <target state="translated">Сімейний офіс</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -5707,7 +5735,7 @@
<target state="translated">Інвестор</target> <target state="translated">Інвестор</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -5719,7 +5747,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -5731,7 +5759,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -5739,7 +5767,7 @@
<target state="translated">Конфіденційність</target> <target state="translated">Конфіденційність</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -5747,7 +5775,7 @@
<target state="translated">Програмне забезпечення</target> <target state="translated">Програмне забезпечення</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -5755,7 +5783,7 @@
<target state="translated">Інструмент</target> <target state="translated">Інструмент</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -5763,7 +5791,7 @@
<target state="translated">Користувацький досвід</target> <target state="translated">Користувацький досвід</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -5771,7 +5799,7 @@
<target state="translated">Багатство</target> <target state="translated">Багатство</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -5779,7 +5807,7 @@
<target state="translated">Управління багатством</target> <target state="translated">Управління багатством</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4649895231694574166" datatype="html"> <trans-unit id="4649895231694574166" datatype="html">
@ -5799,24 +5827,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">Ви шукаєте відкриту альтернативу для <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> є потужним інструментом управління портфелем, який надає індивідуумам комплексну платформу для відстеження, аналізу та оптимізації їхніх інвестицій. Незалежно від того, чи ви досвідчений інвестор, чи тільки починаєте, Ghostfolio пропонує зручний інтерфейс користувача та <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>широкий спектр функціональностей<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> для допомоги вам у прийнятті обґрунтованих рішень та взятті під контроль вашого фінансового майбутнього.</target> <target state="translated">Ви шукаєте відкриту альтернативу для <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> є потужним інструментом управління портфелем, який надає індивідуумам комплексну платформу для відстеження, аналізу та оптимізації їхніх інвестицій. Незалежно від того, чи ви досвідчений інвестор, чи тільки починаєте, Ghostfolio пропонує зручний інтерфейс користувача та <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>широкий спектр функціональностей<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> для допомоги вам у прийнятті обґрунтованих рішень та взятті під контроль вашого фінансового майбутнього.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio є відкритим програмним забезпеченням (OSS), що надає економічно ефективну альтернативу для <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>, роблячи його особливо підходящим для тих, хто обмежений у бюджеті, таких як <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>прагнення до фінансової незалежності, раннього виходу на пенсію (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Використовуючи колективні зусилля спільноти розробників та ентузіастів особистих фінансів, Ghostfolio постійно покращує свої можливості, безпеку та користувацький досвід.</target> <target state="translated">Ghostfolio є відкритим програмним забезпеченням (OSS), що надає економічно ефективну альтернативу для <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>, роблячи його особливо підходящим для тих, хто обмежений у бюджеті, таких як <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>прагнення до фінансової незалежності, раннього виходу на пенсію (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. Використовуючи колективні зусилля спільноти розробників та ентузіастів особистих фінансів, Ghostfolio постійно покращує свої можливості, безпеку та користувацький досвід.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">Давайте заглибимося у детальну порівняльну таблицю Ghostfolio проти <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> нижче, щоб отримати повне розуміння того, як Ghostfolio позиціонує себе відносно <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. Ми дослідимо різні аспекти, такі як функції, конфіденційність даних, ціни тощо, що дозволить вам зробити добре обдуманий вибір для ваших особистих потреб.</target> <target state="translated">Давайте заглибимося у детальну порівняльну таблицю Ghostfolio проти <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> нижче, щоб отримати повне розуміння того, як Ghostfolio позиціонує себе відносно <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. Ми дослідимо різні аспекти, такі як функції, конфіденційність даних, ціни тощо, що дозволить вам зробити добре обдуманий вибір для ваших особистих потреб.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -5835,8 +5863,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Порівняльна таблиця Ghostfolio проти <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/></target> <target state="translated">Порівняльна таблиця Ghostfolio проти <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/></target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -5883,8 +5911,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> є відкритим програмним забезпеченням</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> є відкритим програмним забезпеченням</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -5931,8 +5959,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> не є відкритим програмним забезпеченням</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> не є відкритим програмним забезпеченням</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -6011,8 +6039,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> може бути self-hosted</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> може бути self-hosted</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -6031,8 +6059,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> не може бути self-hosted</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> не може бути self-hosted</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -6051,8 +6079,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> може використовуватися анонімно</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> може використовуватися анонімно</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -6063,8 +6091,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> не може використовуватися анонімно</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> не може використовуватися анонімно</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -6083,8 +6111,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> пропонує безкоштовний план</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> пропонує безкоштовний план</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -6095,8 +6123,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> не пропонує безкоштовний план</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> не пропонує безкоштовний план</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -6135,8 +6163,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">Зазначаємо, що інформація, надана в порівняльній таблиці Ghostfolio проти <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> базується на нашому незалежному дослідженні та аналізі. Цей веб-сайт не пов’язаний з <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> або будь-яким іншим продуктом, згаданим у порівнянні. Оскільки ландшафт інструментів особистих фінансів еволюціонує, важливо перевіряти будь-які конкретні деталі або зміни безпосередньо на сторінці відповідного продукту. Потрібно оновити дані? Допоможіть нам підтримувати точні дані на <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/> GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target> <target state="translated">Зазначаємо, що інформація, надана в порівняльній таблиці Ghostfolio проти <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> базується на нашому незалежному дослідженні та аналізі. Цей веб-сайт не пов’язаний з <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> або будь-яким іншим продуктом, згаданим у порівнянні. Оскільки ландшафт інструментів особистих фінансів еволюціонує, важливо перевіряти будь-які конкретні деталі або зміни безпосередньо на сторінці відповідного продукту. Потрібно оновити дані? Допоможіть нам підтримувати точні дані на <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/> GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -6343,7 +6371,7 @@
<target state="translated">WTD</target> <target state="translated">WTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6363,7 +6391,7 @@
<target state="translated">MTD</target> <target state="translated">MTD</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6383,7 +6411,7 @@
<target state="translated">рік</target> <target state="translated">рік</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6403,7 +6431,7 @@
<target state="translated">роки</target> <target state="translated">роки</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6759,7 +6787,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6819,7 +6847,7 @@
<target state="translated">Закрити</target> <target state="translated">Закрити</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6847,7 +6875,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -7463,7 +7491,7 @@
<target state="translated">Лінивий</target> <target state="translated">Лінивий</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7471,7 +7499,7 @@
<target state="translated">Миттєвий</target> <target state="translated">Миттєвий</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7479,7 +7507,7 @@
<target state="new">Default Market Price</target> <target state="new">Default Market Price</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7487,7 +7515,7 @@
<target state="translated">Режим</target> <target state="translated">Режим</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7495,7 +7523,7 @@
<target state="translated">Селектор</target> <target state="translated">Селектор</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7503,7 +7531,7 @@
<target state="new">HTTP Request Headers</target> <target state="new">HTTP Request Headers</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7511,7 +7539,7 @@
<target state="new">end of day</target> <target state="new">end of day</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7519,7 +7547,7 @@
<target state="translated">реальний час</target> <target state="translated">реальний час</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7720,7 +7748,7 @@
<target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target> <target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7728,7 +7756,7 @@
<target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target> <target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8079,7 +8107,7 @@
<target state="new">Current month</target> <target state="new">Current month</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -517,7 +517,7 @@
<source>Delete</source> <source>Delete</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -567,7 +567,7 @@
<source>Paid</source> <source>Paid</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3175281009707730014" datatype="html"> <trans-unit id="3175281009707730014" datatype="html">
@ -585,7 +585,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -624,10 +624,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -792,6 +788,13 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<context-group purpose="location"> <context-group purpose="location">
@ -817,6 +820,13 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<context-group purpose="location"> <context-group purpose="location">
@ -988,7 +998,7 @@
<source>Scraper Configuration</source> <source>Scraper Configuration</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1184,7 +1194,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1199,7 +1209,7 @@
<source>Asset profile has been saved</source> <source>Asset profile has been saved</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -1234,7 +1244,7 @@
<source>Current year</source> <source>Current year</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1359,11 +1369,11 @@
<source>Could not validate form</source> <source>Could not validate form</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1396,7 +1406,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1592,7 +1602,7 @@
<source>Current week</source> <source>Current week</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2037,7 +2047,7 @@
<source>YTD</source> <source>YTD</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2048,7 +2058,7 @@
<source>1Y</source> <source>1Y</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2059,7 +2069,7 @@
<source>5Y</source> <source>5Y</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2077,7 +2087,7 @@
<source>Max</source> <source>Max</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2223,7 +2233,7 @@
<source>Coupon</source> <source>Coupon</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -2237,7 +2247,7 @@
<source>Locale</source> <source>Locale</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -2781,11 +2791,11 @@
<source>Could not parse scraper configuration</source> <source>Could not parse scraper configuration</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -2969,6 +2979,13 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<context-group purpose="location"> <context-group purpose="location">
@ -3591,13 +3608,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<context-group purpose="location"> <context-group purpose="location">
@ -3820,7 +3830,7 @@
<source>Trial</source> <source>Trial</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -3972,13 +3982,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="6293970137138896363" datatype="html"> <trans-unit id="6293970137138896363" datatype="html">
<source>Top</source> <source>Top</source>
<context-group purpose="location"> <context-group purpose="location">
@ -4101,6 +4104,13 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<context-group purpose="location"> <context-group purpose="location">
@ -4195,6 +4205,13 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<context-group purpose="location"> <context-group purpose="location">
@ -4228,11 +4245,11 @@
<source>Could not save asset profile</source> <source>Could not save asset profile</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -4358,21 +4375,21 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -4390,7 +4407,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -4541,7 +4558,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -4565,7 +4582,7 @@
<source>Global</source> <source>Global</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5443,14 +5460,14 @@
<source>The current market price is</source> <source>The current market price is</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
<source>Test</source> <source>Test</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2570446216260149991" datatype="html"> <trans-unit id="2570446216260149991" datatype="html">
@ -5548,7 +5565,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -5597,7 +5614,7 @@
<source>MTD</source> <source>MTD</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -5608,7 +5625,7 @@
<source>WTD</source> <source>WTD</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -5644,7 +5661,7 @@
<source>year</source> <source>year</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -5663,7 +5680,7 @@
<source>years</source> <source>years</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -5704,7 +5721,7 @@
<source>Data Gathering</source> <source>Data Gathering</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -5736,6 +5753,13 @@
<context context-type="linenumber">240</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<context-group purpose="location"> <context-group purpose="location">
@ -5936,7 +5960,7 @@
<source>Wealth</source> <source>Wealth</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -5995,7 +6019,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6009,35 +6033,35 @@
<source>User Experience</source> <source>User Experience</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
<source>App</source> <source>App</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
<source>Tool</source> <source>Tool</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
<source>Investor</source> <source>Investor</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
<source>Wealth Management</source> <source>Wealth Management</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6051,14 +6075,14 @@
<source>Alternative</source> <source>Alternative</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4622218074144052433" datatype="html"> <trans-unit id="4622218074144052433" datatype="html">
<source>Family Office</source> <source>Family Office</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6069,21 +6093,21 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
<source>Software</source> <source>Software</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
<source>Budgeting</source> <source>Budgeting</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6094,14 +6118,14 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
<source>Privacy</source> <source>Privacy</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1518717392874668219" datatype="html"> <trans-unit id="1518717392874668219" datatype="html">
@ -6115,7 +6139,7 @@
<source>Error</source> <source>Error</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6126,7 +6150,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6205,7 +6229,7 @@
<source>Close</source> <source>Close</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6233,7 +6257,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6358,7 +6382,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -6369,7 +6393,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -6408,7 +6432,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -6426,7 +6450,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -6437,7 +6461,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -6448,7 +6472,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -6459,7 +6483,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -6470,7 +6494,7 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6703,7 +6727,7 @@
<source>Save</source> <source>Save</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6803,56 +6827,56 @@
<source>Mode</source> <source>Mode</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
<source>Selector</source> <source>Selector</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
<source>Instant</source> <source>Instant</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8540986733881734625" datatype="html"> <trans-unit id="8540986733881734625" datatype="html">
<source>Lazy</source> <source>Lazy</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
<source>HTTP Request Headers</source> <source>HTTP Request Headers</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
<source>real-time</source> <source>real-time</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
<source>end of day</source> <source>end of day</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7032,14 +7056,14 @@
<source><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</source> <source><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
<source>An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</source> <source>An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -7331,7 +7355,7 @@
<source>Current month</source> <source>Current month</source>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -548,7 +548,7 @@
<target state="translated">删除</target> <target state="translated">删除</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">301</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
@ -600,7 +600,7 @@
<target state="new">Paid</target> <target state="new">Paid</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">117</context> <context context-type="linenumber">121</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3175281009707730014" datatype="html"> <trans-unit id="3175281009707730014" datatype="html">
@ -620,7 +620,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">453</context> <context context-type="linenumber">468</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1107354728956440783" datatype="html"> <trans-unit id="1107354728956440783" datatype="html">
@ -662,10 +662,6 @@
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">134</context> <context context-type="linenumber">134</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="340430316261570792" datatype="html"> <trans-unit id="340430316261570792" datatype="html">
<source>Finished</source> <source>Finished</source>
@ -847,6 +843,14 @@
<context context-type="linenumber">50</context> <context context-type="linenumber">50</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</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">449</context>
</context-group>
</trans-unit>
<trans-unit id="6424689559488978075" datatype="html"> <trans-unit id="6424689559488978075" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">活动计数</target> <target state="translated">活动计数</target>
@ -875,6 +879,14 @@
<context context-type="linenumber">174</context> <context context-type="linenumber">174</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="3720539089813177542" datatype="html"> <trans-unit id="3720539089813177542" datatype="html">
<source>Countries Count</source> <source>Countries Count</source>
<target state="translated">国家数</target> <target state="translated">国家数</target>
@ -1040,7 +1052,7 @@
<target state="translated">刮削配置</target> <target state="translated">刮削配置</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">476</context> <context context-type="linenumber">491</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4388879716045736175" datatype="html"> <trans-unit id="4388879716045736175" datatype="html">
@ -1260,7 +1272,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">555</context> <context context-type="linenumber">570</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.html</context>
@ -1276,7 +1288,7 @@
<target state="translated">资产概况已保存</target> <target state="translated">资产概况已保存</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">624</context> <context context-type="linenumber">645</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7214871309640504920" datatype="html"> <trans-unit id="7214871309640504920" datatype="html">
@ -1316,7 +1328,7 @@
<target state="translated">当前年份</target> <target state="translated">当前年份</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4343859224042481913" datatype="html"> <trans-unit id="4343859224042481913" datatype="html">
@ -1456,11 +1468,11 @@
<target state="translated">无法验证表单</target> <target state="translated">无法验证表单</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">600</context> <context context-type="linenumber">621</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">624</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="735924103945447056" datatype="html"> <trans-unit id="735924103945447056" datatype="html">
@ -1496,7 +1508,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">98</context> <context context-type="linenumber">106</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context> <context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@ -1712,7 +1724,7 @@
<target state="translated">当前周</target> <target state="translated">当前周</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6005640251215534178" datatype="html"> <trans-unit id="6005640251215534178" datatype="html">
@ -2196,7 +2208,7 @@
<target state="translated">年初至今</target> <target state="translated">年初至今</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">212</context> <context context-type="linenumber">228</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2208,7 +2220,7 @@
<target state="translated">1年</target> <target state="translated">1年</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2220,7 +2232,7 @@
<target state="translated">5年</target> <target state="translated">5年</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2240,7 +2252,7 @@
<target state="translated">最大限度</target> <target state="translated">最大限度</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -2404,7 +2416,7 @@
<target state="new">Coupon</target> <target state="new">Coupon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context> <context context-type="linenumber">126</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2826581353496868063" datatype="html"> <trans-unit id="2826581353496868063" datatype="html">
@ -2420,7 +2432,7 @@
<target state="translated">语言环境</target> <target state="translated">语言环境</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">514</context> <context context-type="linenumber">529</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
@ -3004,11 +3016,11 @@
<target state="translated">无法解析抓取器配置</target> <target state="translated">无法解析抓取器配置</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">551</context> <context context-type="linenumber">569</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">554</context> <context context-type="linenumber">572</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5152858168588361831" datatype="html"> <trans-unit id="5152858168588361831" datatype="html">
@ -3211,6 +3223,14 @@
<context context-type="linenumber">334</context> <context context-type="linenumber">334</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="803941175683258052" datatype="html"> <trans-unit id="803941175683258052" datatype="html">
<source>Holdings</source> <source>Holdings</source>
<target state="translated">持仓</target> <target state="translated">持仓</target>
@ -3903,14 +3923,6 @@
<context context-type="linenumber">239</context> <context context-type="linenumber">239</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1812379335568847528" datatype="html">
<source>Subscriptions</source>
<target state="new">Subscriptions</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">131</context>
</context-group>
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html"> <trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source> <source>Import Activities</source>
<target state="translated">导入活动记录</target> <target state="translated">导入活动记录</target>
@ -4160,7 +4172,7 @@
<target state="new">Trial</target> <target state="new">Trial</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">125</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="79310201207169632" datatype="html"> <trans-unit id="79310201207169632" datatype="html">
@ -4327,14 +4339,6 @@
<context context-type="linenumber">93</context> <context context-type="linenumber">93</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
<target state="new">Expires</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="6293970137138896363" datatype="html"> <trans-unit id="6293970137138896363" datatype="html">
<source>Top</source> <source>Top</source>
<target state="translated">顶部</target> <target state="translated">顶部</target>
@ -4471,6 +4475,14 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</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">214</context>
</context-group>
</trans-unit>
<trans-unit id="2640837868763558546" datatype="html"> <trans-unit id="2640837868763558546" datatype="html">
<source>Unlimited Transactions</source> <source>Unlimited Transactions</source>
<target state="translated">无限交易</target> <target state="translated">无限交易</target>
@ -4575,6 +4587,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">199</context>
</context-group>
</trans-unit>
<trans-unit id="6463889888921382396" datatype="html"> <trans-unit id="6463889888921382396" datatype="html">
<source>Email and Chat Support</source> <source>Email and Chat Support</source>
<target state="translated">电子邮件和聊天支持</target> <target state="translated">电子邮件和聊天支持</target>
@ -4612,11 +4632,11 @@
<target state="translated">无法保存资产概况</target> <target state="translated">无法保存资产概况</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">634</context> <context context-type="linenumber">655</context>
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">637</context> <context context-type="linenumber">658</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8289257900569435140" datatype="html"> <trans-unit id="8289257900569435140" datatype="html">
@ -4757,24 +4777,24 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5100352603258735382" datatype="html"> <trans-unit id="5100352603258735382" datatype="html">
<source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source> <source>Are you looking for an open source alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>? <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>Ghostfolio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a <x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>wide range of functionalities<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> to help you make informed decisions and take control of your financial future.</source>
<target state="translated">您是否正在寻找开源替代方案<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>?<x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>幽灵作品集<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>是一个强大的投资组合管理工具,为个人提供一个全面的平台来跟踪、分析和优化他们的投资。无论您是经验丰富的投资者还是刚刚起步的投资者,Ghostfolio 都提供直观的用户界面和<x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>广泛的功能<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>帮助您做出明智的决定并掌控您的财务未来。</target> <target state="translated">您是否正在寻找开源替代方案<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>?<x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;routerLinkAbout&quot;&gt;"/>幽灵作品集<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>是一个强大的投资组合管理工具,为个人提供一个全面的平台来跟踪、分析和优化他们的投资。无论您是经验丰富的投资者还是刚刚起步的投资者,Ghostfolio 都提供直观的用户界面和<x id="START_LINK_1" equiv-text="&lt;a [routerLink]=&quot;routerLinkFeatures&quot; &gt;"/>广泛的功能<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>帮助您做出明智的决定并掌控您的财务未来。</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314014538091101522" datatype="html"> <trans-unit id="7314014538091101522" datatype="html">
<source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source> <source>Ghostfolio is an open source software (OSS), providing a cost-effective alternative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> making it particularly suitable for individuals on a tight budget, such as those <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>pursuing Financial Independence, Retire Early (FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>. By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience.</source>
<target state="translated">Ghostfolio 是一款开源软件 (OSS),提供了一种经济高效的替代方案<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>使其特别适合预算紧张的个人,例如<x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>追求财务独立,提前退休(FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> 。通过利用开发者社区和个人理财爱好者的集体努力,Ghostfolio 不断增强其功能、安全性和用户体验。</target> <target state="translated">Ghostfolio 是一款开源软件 (OSS),提供了一种经济高效的替代方案<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>使其特别适合预算紧张的个人,例如<x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;../en/blog/2023/07/exploring-the-path-to-fire&quot; &gt;"/>追求财务独立,提前退休(FIRE)<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/> 。通过利用开发者社区和个人理财爱好者的集体努力,Ghostfolio 不断增强其功能、安全性和用户体验。</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2315631726271602419" datatype="html"> <trans-unit id="2315631726271602419" datatype="html">
<source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source> <source>Let’s dive deeper into the detailed Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>. We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements.</source>
<target state="translated">让我们更深入地了解 Ghostfolio 与<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>下面的比较表可帮助您全面了解 Ghostfolio 相对于其他产品的定位<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>。我们将探讨功能、数据隐私、定价等各个方面,让您根据个人需求做出明智的选择。</target> <target state="translated">让我们更深入地了解 Ghostfolio 与<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>下面的比较表可帮助您全面了解 Ghostfolio 相对于其他产品的定位<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>。我们将探讨功能、数据隐私、定价等各个方面,让您根据个人需求做出明智的选择。</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">44</context> <context context-type="linenumber">44</context>
@ -4793,8 +4813,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4909535316439940790" datatype="html"> <trans-unit id="4909535316439940790" datatype="html">
<source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table</source> <source>Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table</source>
<target state="translated">Ghostfolio vs<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>比较表</target> <target state="translated">Ghostfolio vs<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>比较表</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">55</context> <context context-type="linenumber">55</context>
@ -4957,8 +4977,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2192861316878557060" datatype="html"> <trans-unit id="2192861316878557060" datatype="html">
<source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2.name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source> <source>Please note that the information provided in the Ghostfolio vs <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> comparison table is based on our independent research and analysis. This website is not affiliated with <x id="INTERPOLATION" equiv-text="{{ product2().name }}"/> or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
<target state="translated">请注意,在 Ghostfolio 与<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>的比较表中提供的信息基于我们的独立研究和分析。该网站不隶属于<x id="INTERPOLATION" equiv-text="{{ product2.name }}"/>或比较中提到的任何其他产品。随着个人理财工具格局的不断发展,直接从相应的产品页面验证任何具体的细节或变化至关重要。数据需要刷新吗?帮助我们在<x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> 上维护准确的数据。</target> <target state="translated">请注意,在 Ghostfolio 与<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>的比较表中提供的信息基于我们的独立研究和分析。该网站不隶属于<x id="INTERPOLATION" equiv-text="{{ product2().name }}"/>或比较中提到的任何其他产品。随着个人理财工具格局的不断发展,直接从相应的产品页面验证任何具体的细节或变化至关重要。数据需要刷新吗?帮助我们在<x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio&quot;&gt;"/>GitHub<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> 上维护准确的数据。</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">312</context> <context context-type="linenumber">312</context>
@ -4985,7 +5005,7 @@
<target state="translated">全球的</target> <target state="translated">全球的</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">51</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
@ -5957,7 +5977,7 @@
<target state="translated">当前市场价格为</target> <target state="translated">当前市场价格为</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">749</context> <context context-type="linenumber">770</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6563391987554512024" datatype="html"> <trans-unit id="6563391987554512024" datatype="html">
@ -5965,7 +5985,7 @@
<target state="translated">测试</target> <target state="translated">测试</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">573</context> <context context-type="linenumber">588</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2570446216260149991" datatype="html"> <trans-unit id="2570446216260149991" datatype="html">
@ -6073,7 +6093,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">100</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="858192247408211331" datatype="html"> <trans-unit id="858192247408211331" datatype="html">
@ -6129,7 +6149,7 @@
<target state="translated">本月至今</target> <target state="translated">本月至今</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6141,7 +6161,7 @@
<target state="translated">本周至今</target> <target state="translated">本周至今</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">204</context> <context context-type="linenumber">220</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6181,7 +6201,7 @@
<target state="translated">年</target> <target state="translated">年</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">216</context> <context context-type="linenumber">232</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
@ -6201,7 +6221,7 @@
<target state="translated">年</target> <target state="translated">年</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">220</context> <context context-type="linenumber">236</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
@ -6246,7 +6266,7 @@
<target state="translated">数据收集</target> <target state="translated">数据收集</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">596</context> <context context-type="linenumber">611</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
@ -6281,6 +6301,14 @@
<context context-type="linenumber">240</context> <context context-type="linenumber">240</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</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">210</context>
</context-group>
</trans-unit>
<trans-unit id="2998033970178753887" datatype="html"> <trans-unit id="2998033970178753887" datatype="html">
<source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source> <source>Oops! It looks like you’re making too many requests. Please slow down a bit.</source>
<target state="translated">哎呀!看来您提出了太多要求。请慢一点。</target> <target state="translated">哎呀!看来您提出了太多要求。请慢一点。</target>
@ -6510,7 +6538,7 @@
<target state="translated">另类</target> <target state="translated">另类</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">94</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2818570902941667477" datatype="html"> <trans-unit id="2818570902941667477" datatype="html">
@ -6518,7 +6546,7 @@
<target state="translated">应用</target> <target state="translated">应用</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">95</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="647668541461749965" datatype="html"> <trans-unit id="647668541461749965" datatype="html">
@ -6526,7 +6554,7 @@
<target state="translated">预算管理</target> <target state="translated">预算管理</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">88</context> <context context-type="linenumber">96</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1274247756500564795" datatype="html"> <trans-unit id="1274247756500564795" datatype="html">
@ -6586,7 +6614,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">97</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1284643802050750978" datatype="html"> <trans-unit id="1284643802050750978" datatype="html">
@ -6602,7 +6630,7 @@
<target state="translated">家族办公室</target> <target state="translated">家族办公室</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">90</context> <context context-type="linenumber">98</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178143531053451735" datatype="html"> <trans-unit id="3178143531053451735" datatype="html">
@ -6610,7 +6638,7 @@
<target state="translated">投资者</target> <target state="translated">投资者</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">93</context> <context context-type="linenumber">101</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6984983607470794786" datatype="html"> <trans-unit id="6984983607470794786" datatype="html">
@ -6622,7 +6650,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">94</context> <context context-type="linenumber">102</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4852914940817689575" datatype="html"> <trans-unit id="4852914940817689575" datatype="html">
@ -6634,7 +6662,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">96</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8440128775129354214" datatype="html"> <trans-unit id="8440128775129354214" datatype="html">
@ -6642,7 +6670,7 @@
<target state="translated">隐私</target> <target state="translated">隐私</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">97</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5093701986340458388" datatype="html"> <trans-unit id="5093701986340458388" datatype="html">
@ -6650,7 +6678,7 @@
<target state="translated">软件</target> <target state="translated">软件</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">99</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2932360890997178383" datatype="html"> <trans-unit id="2932360890997178383" datatype="html">
@ -6658,7 +6686,7 @@
<target state="translated">工具</target> <target state="translated">工具</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">100</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2657610384052021428" datatype="html"> <trans-unit id="2657610384052021428" datatype="html">
@ -6666,7 +6694,7 @@
<target state="translated">用户体验</target> <target state="translated">用户体验</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1099393285611854080" datatype="html"> <trans-unit id="1099393285611854080" datatype="html">
@ -6674,7 +6702,7 @@
<target state="translated">财富</target> <target state="translated">财富</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">102</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3311387105238837884" datatype="html"> <trans-unit id="3311387105238837884" datatype="html">
@ -6682,7 +6710,7 @@
<target state="translated">财富管理</target> <target state="translated">财富管理</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">111</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html"> <trans-unit id="3477953895055172777" datatype="html">
@ -6706,7 +6734,7 @@
<target state="translated">错误</target> <target state="translated">错误</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">740</context> <context context-type="linenumber">761</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5322473252816589112" datatype="html"> <trans-unit id="5322473252816589112" datatype="html">
@ -6758,7 +6786,7 @@
</context-group> </context-group>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">601</context> <context context-type="linenumber">616</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6810,7 +6838,7 @@
<target state="translated">关闭</target> <target state="translated">关闭</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">603</context> <context context-type="linenumber">618</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -6838,7 +6866,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">229</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html</context>
@ -6986,8 +7014,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2137905359212133111" datatype="html"> <trans-unit id="2137905359212133111" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 是开源软件</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 是开源软件</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">139</context> <context context-type="linenumber">139</context>
@ -6998,8 +7026,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1056127468546316650" datatype="html"> <trans-unit id="1056127468546316650" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> is not Open Source Software</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> is not Open Source Software</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 不是开源软件</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 不是开源软件</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">146</context> <context context-type="linenumber">146</context>
@ -7034,8 +7062,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7530176451725943586" datatype="html"> <trans-unit id="7530176451725943586" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 可以自托管</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 可以自托管</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">178</context>
@ -7054,8 +7082,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6979762073619328236" datatype="html"> <trans-unit id="6979762073619328236" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be self-hosted</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be self-hosted</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 无法自托管</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 无法自托管</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">185</context> <context context-type="linenumber">185</context>
@ -7066,8 +7094,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 可以匿名使用</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 可以匿名使用</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">217</context> <context context-type="linenumber">217</context>
@ -7078,8 +7106,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4605555143173907624" datatype="html"> <trans-unit id="4605555143173907624" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> cannot be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> cannot be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 无法匿名使用</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 无法匿名使用</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">224</context> <context context-type="linenumber">224</context>
@ -7090,8 +7118,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7305671611654052345" datatype="html"> <trans-unit id="7305671611654052345" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> offers a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> offers a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 提供免费计划</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 提供免费计划</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
@ -7102,8 +7130,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3528100267920632809" datatype="html"> <trans-unit id="3528100267920632809" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> does not offer a free plan</source> <source><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> does not offer a free plan</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> 不提供免费计划</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1().name }}"/> 不提供免费计划</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">263</context> <context context-type="linenumber">263</context>
@ -7356,7 +7384,7 @@
<target state="translated">保存</target> <target state="translated">保存</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">612</context> <context context-type="linenumber">627</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html</context>
@ -7464,7 +7492,7 @@
<target state="translated">延迟</target> <target state="translated">延迟</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6882618704933649036" datatype="html"> <trans-unit id="6882618704933649036" datatype="html">
@ -7472,7 +7500,7 @@
<target state="translated">即时</target> <target state="translated">即时</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
@ -7480,7 +7508,7 @@
<target state="translated">默认市场价格</target> <target state="translated">默认市场价格</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">486</context> <context context-type="linenumber">501</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1713271461473302108" datatype="html"> <trans-unit id="1713271461473302108" datatype="html">
@ -7488,7 +7516,7 @@
<target state="translated">模式</target> <target state="translated">模式</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">523</context> <context context-type="linenumber">538</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3540108566782816830" datatype="html"> <trans-unit id="3540108566782816830" datatype="html">
@ -7496,7 +7524,7 @@
<target state="translated">选择器</target> <target state="translated">选择器</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">539</context> <context context-type="linenumber">554</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="645724892732039501" datatype="html"> <trans-unit id="645724892732039501" datatype="html">
@ -7504,7 +7532,7 @@
<target state="translated">HTTP 请求标头</target> <target state="translated">HTTP 请求标头</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">499</context> <context context-type="linenumber">514</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8635324470284879211" datatype="html"> <trans-unit id="8635324470284879211" datatype="html">
@ -7512,7 +7540,7 @@
<target state="translated">收盘</target> <target state="translated">收盘</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">239</context> <context context-type="linenumber">255</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4547068148181074902" datatype="html"> <trans-unit id="4547068148181074902" datatype="html">
@ -7520,7 +7548,7 @@
<target state="translated">实时</target> <target state="translated">实时</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">243</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7109040016560023658" datatype="html"> <trans-unit id="7109040016560023658" datatype="html">
@ -7721,7 +7749,7 @@
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) 已在使用中。</target> <target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) 已在使用中。</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">702</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5612909502553004436" datatype="html"> <trans-unit id="5612909502553004436" datatype="html">
@ -7729,7 +7757,7 @@
<target state="translated">在更新到 <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) 时发生错误。</target> <target state="translated">在更新到 <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) 时发生错误。</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">689</context> <context context-type="linenumber">710</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4391289919356861627" datatype="html"> <trans-unit id="4391289919356861627" datatype="html">
@ -8080,7 +8108,7 @@
<target state="translated">当前月份</target> <target state="translated">当前月份</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">224</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7387635272539030076" datatype="html"> <trans-unit id="7387635272539030076" datatype="html">

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

@ -5,11 +5,13 @@ import ms from 'ms';
import { ColorScheme, DateRange } from './types'; import { ColorScheme, DateRange } from './types';
export const ghostfolioPrefix = 'GF'; export const ghostfolioPrefix = 'GF';
/* @deprecated */
export const ghostfolioScraperApiSymbolPrefix = `_${ghostfolioPrefix}_`; export const ghostfolioScraperApiSymbolPrefix = `_${ghostfolioPrefix}_`;
export const ghostfolioFearAndGreedIndexDataSourceCryptocurrencies = export const ghostfolioFearAndGreedIndexDataSourceCryptocurrencies =
DataSource.MANUAL; DataSource.MANUAL;
export const ghostfolioFearAndGreedIndexDataSourceStocks = DataSource.RAPID_API; export const ghostfolioFearAndGreedIndexDataSourceStocks = DataSource.RAPID_API;
export const ghostfolioFearAndGreedIndexSymbol = `${ghostfolioScraperApiSymbolPrefix}FEAR_AND_GREED_INDEX`;
export const ghostfolioFearAndGreedIndexSymbolCryptocurrencies = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_CRYPTOCURRENCIES`; export const ghostfolioFearAndGreedIndexSymbolCryptocurrencies = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_CRYPTOCURRENCIES`;
export const ghostfolioFearAndGreedIndexSymbolStocks = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_STOCKS`; export const ghostfolioFearAndGreedIndexSymbolStocks = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_STOCKS`;
@ -88,8 +90,12 @@ export const DEFAULT_PAGE_SIZE = 50;
export const DEFAULT_PORT = 3333; export const DEFAULT_PORT = 3333;
export const DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY = 1; export const DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY = 1;
export const DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY = 1; export const DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY = 1;
export const DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_TIMEOUT =
ms('1 minute');
export const DEFAULT_PROCESSOR_GATHER_STATISTICS_CONCURRENCY = 1;
export const DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY = 1; export const DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY = 1;
export const DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT = 30000; export const DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT =
ms('30 seconds');
export const DEFAULT_REDACTED_PATHS = [ export const DEFAULT_REDACTED_PATHS = [
'accounts[*].balance', 'accounts[*].balance',
@ -228,6 +234,7 @@ export const HEADER_KEY_SKIP_INTERCEPTOR = 'X-Skip-Interceptor';
export const MAX_TOP_HOLDINGS = 50; export const MAX_TOP_HOLDINGS = 50;
export const NUMERICAL_PRECISION_THRESHOLD_3_FIGURES = 100; export const NUMERICAL_PRECISION_THRESHOLD_3_FIGURES = 100;
export const NUMERICAL_PRECISION_THRESHOLD_4_FIGURES = 1000;
export const NUMERICAL_PRECISION_THRESHOLD_5_FIGURES = 10000; export const NUMERICAL_PRECISION_THRESHOLD_5_FIGURES = 10000;
export const NUMERICAL_PRECISION_THRESHOLD_6_FIGURES = 100000; export const NUMERICAL_PRECISION_THRESHOLD_6_FIGURES = 100000;

12
libs/common/src/lib/dtos/update-asset-profile.dto.ts

@ -1,6 +1,12 @@
import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code';
import { AssetClass, AssetSubClass, DataSource, Prisma } from '@prisma/client'; import {
AssetClass,
AssetSubClass,
DataGatheringFrequency,
DataSource,
Prisma
} from '@prisma/client';
import { import {
IsArray, IsArray,
IsBoolean, IsBoolean,
@ -32,6 +38,10 @@ export class UpdateAssetProfileDto {
@IsOptional() @IsOptional()
currency?: string; currency?: string;
@IsEnum(DataGatheringFrequency)
@IsOptional()
dataGatheringFrequency?: DataGatheringFrequency;
@IsEnum(DataSource) @IsEnum(DataSource)
@IsOptional() @IsOptional()
dataSource?: DataSource; dataSource?: DataSource;

19
libs/common/src/lib/helper.ts

@ -1,7 +1,6 @@
import { NumberParser } from '@internationalized/number'; import { NumberParser } from '@internationalized/number';
import { import {
Type as ActivityType, Type as ActivityType,
DataSource,
MarketData, MarketData,
Prisma, Prisma,
SymbolProfile, SymbolProfile,
@ -38,7 +37,6 @@ import {
DEFAULT_CURRENCY, DEFAULT_CURRENCY,
DEFAULT_LOCALE, DEFAULT_LOCALE,
DERIVED_CURRENCIES, DERIVED_CURRENCIES,
ghostfolioFearAndGreedIndexSymbol,
ghostfolioFearAndGreedIndexSymbolCryptocurrencies, ghostfolioFearAndGreedIndexSymbolCryptocurrencies,
ghostfolioFearAndGreedIndexSymbolStocks, ghostfolioFearAndGreedIndexSymbolStocks,
ghostfolioScraperApiSymbolPrefix ghostfolioScraperApiSymbolPrefix
@ -157,7 +155,6 @@ export function canDeleteAssetProfile({
!isBenchmark && !isBenchmark &&
!isDerivedCurrency(getCurrencyFromSymbol(symbol)) && !isDerivedCurrency(getCurrencyFromSymbol(symbol)) &&
!isRootCurrency(getCurrencyFromSymbol(symbol)) && !isRootCurrency(getCurrencyFromSymbol(symbol)) &&
symbol !== ghostfolioFearAndGreedIndexSymbol &&
symbol !== ghostfolioFearAndGreedIndexSymbolCryptocurrencies && symbol !== ghostfolioFearAndGreedIndexSymbolCryptocurrencies &&
symbol !== ghostfolioFearAndGreedIndexSymbolStocks && symbol !== ghostfolioFearAndGreedIndexSymbolStocks &&
watchedByCount === 0 watchedByCount === 0
@ -168,14 +165,6 @@ export function capitalize(aString: string) {
return aString.charAt(0).toUpperCase() + aString.slice(1).toLowerCase(); return aString.charAt(0).toUpperCase() + aString.slice(1).toLowerCase();
} }
export function decodeDataSource(encodedDataSource: string) {
if (encodedDataSource) {
return Buffer.from(encodedDataSource, 'hex').toString();
}
return undefined;
}
export function downloadAsFile({ export function downloadAsFile({
content, content,
contentType = 'text/plain', contentType = 'text/plain',
@ -201,14 +190,6 @@ export function downloadAsFile({
a.click(); a.click();
} }
export function encodeDataSource(aDataSource: DataSource) {
if (aDataSource) {
return Buffer.from(aDataSource, 'utf-8').toString('hex');
}
return undefined;
}
export function extractNumberFromString({ export function extractNumberFromString({
locale = 'en-US', locale = 'en-US',
value value

8
libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts

@ -1,4 +1,9 @@
import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; import {
AssetClass,
AssetSubClass,
DataGatheringFrequency,
DataSource
} from '@prisma/client';
import { Country } from './country.interface'; import { Country } from './country.interface';
import { DataProviderInfo } from './data-provider-info.interface'; import { DataProviderInfo } from './data-provider-info.interface';
@ -15,6 +20,7 @@ export interface EnhancedSymbolProfile {
createdAt: Date; createdAt: Date;
currency?: string; currency?: string;
cusip?: string; cusip?: string;
dataGatheringFrequency?: DataGatheringFrequency;
dataProviderInfo?: DataProviderInfo; dataProviderInfo?: DataProviderInfo;
dataSource: DataSource; dataSource: DataSource;
dateOfFirstActivity?: Date; dateOfFirstActivity?: Date;

2
libs/common/src/lib/interfaces/holding.interface.ts

@ -1,5 +1,5 @@
export interface Holding { export interface Holding {
allocationInPercentage: number; allocationInPercentage: number;
name: string; name: string;
valueInBaseCurrency: number; valueInBaseCurrency?: number;
} }

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

@ -47,6 +47,7 @@ import type { AdminUsersResponse } from './responses/admin-users-response.interf
import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface';
import type { AiServiceHealthResponse } from './responses/ai-service-health-response.interface'; import type { AiServiceHealthResponse } from './responses/ai-service-health-response.interface';
import type { ApiKeyResponse } from './responses/api-key-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface';
import type { AssetProfileResponse } from './responses/asset-profile-response.interface';
import type { AssetProfilesResponse } from './responses/asset-profiles-response.interface'; import type { AssetProfilesResponse } from './responses/asset-profiles-response.interface';
import type { AssetResponse } from './responses/asset-response.interface'; import type { AssetResponse } from './responses/asset-response.interface';
import type { BenchmarkMarketDataDetailsResponse } from './responses/benchmark-market-data-details-response.interface'; import type { BenchmarkMarketDataDetailsResponse } from './responses/benchmark-market-data-details-response.interface';
@ -67,7 +68,6 @@ import type { HistoricalResponse } from './responses/historical-response.interfa
import type { ImportResponse } from './responses/import-response.interface'; import type { ImportResponse } from './responses/import-response.interface';
import type { InfoResponse } from './responses/info-response.interface'; import type { InfoResponse } from './responses/info-response.interface';
import type { LookupResponse } from './responses/lookup-response.interface'; import type { LookupResponse } from './responses/lookup-response.interface';
import type { MarketDataDetailsResponse } from './responses/market-data-details-response.interface';
import type { MarketDataOfMarketsResponse } from './responses/market-data-of-markets-response.interface'; import type { MarketDataOfMarketsResponse } from './responses/market-data-of-markets-response.interface';
import type { OAuthResponse } from './responses/oauth-response.interface'; import type { OAuthResponse } from './responses/oauth-response.interface';
import type { PlatformsResponse } from './responses/platforms-response.interface'; import type { PlatformsResponse } from './responses/platforms-response.interface';
@ -125,6 +125,7 @@ export {
AssetClassSelectorOption, AssetClassSelectorOption,
AssetProfileIdentifier, AssetProfileIdentifier,
AssetProfileItem, AssetProfileItem,
AssetProfileResponse,
AssetProfilesResponse, AssetProfilesResponse,
AssetResponse, AssetResponse,
AttestationCredentialJSON, AttestationCredentialJSON,
@ -160,7 +161,6 @@ export {
LookupItem, LookupItem,
LookupResponse, LookupResponse,
MarketData, MarketData,
MarketDataDetailsResponse,
MarketDataOfMarketsResponse, MarketDataOfMarketsResponse,
NullableLineChartItem, NullableLineChartItem,
OAuthResponse, OAuthResponse,

2
libs/common/src/lib/interfaces/responses/market-data-details-response.interface.ts → libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts

@ -2,7 +2,7 @@ import { MarketData } from '@prisma/client';
import { EnhancedSymbolProfile } from '../enhanced-symbol-profile.interface'; import { EnhancedSymbolProfile } from '../enhanced-symbol-profile.interface';
export interface MarketDataDetailsResponse { export interface AssetProfileResponse {
assetProfile: Partial<EnhancedSymbolProfile>; assetProfile: Partial<EnhancedSymbolProfile>;
marketData: MarketData[]; marketData: MarketData[];
} }

13
libs/common/src/lib/interfaces/responses/export-response.interface.ts

@ -1,13 +1,7 @@
import { import { Account, Order, Platform, SymbolProfile, Tag } from '@prisma/client';
Account,
DataSource,
Order,
Platform,
SymbolProfile,
Tag
} from '@prisma/client';
import { AccountBalance } from '../account-balance.interface'; import { AccountBalance } from '../account-balance.interface';
import { AssetProfileIdentifier } from '../asset-profile-identifier.interface';
import { MarketData } from '../market-data.interface'; import { MarketData } from '../market-data.interface';
import { UserSettings } from '../user-settings.interface'; import { UserSettings } from '../user-settings.interface';
@ -24,10 +18,11 @@ export interface ExportResponse {
| 'symbolProfileId' | 'symbolProfileId'
| 'updatedAt' | 'updatedAt'
| 'userId' | 'userId'
> & { dataSource: DataSource; date: string; symbol: string })[]; > & { date: string } & AssetProfileIdentifier)[];
assetProfiles: (Omit< assetProfiles: (Omit<
SymbolProfile, SymbolProfile,
| 'createdAt' | 'createdAt'
| 'dataGatheringFrequency'
| 'id' | 'id'
| 'scraperConfiguration' | 'scraperConfiguration'
| 'symbolMapping' | 'symbolMapping'

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

@ -44,10 +44,6 @@ export interface PortfolioHoldingResponse {
netPerformanceWithCurrencyEffect: number; netPerformanceWithCurrencyEffect: number;
performances: Benchmark['performances']; performances: Benchmark['performances'];
quantity: number; quantity: number;
/* @deprecated */
SymbolProfile: EnhancedSymbolProfile;
tags: Tag[]; tags: Tag[];
value: number; value: number;
} }

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save