Compare commits
47 Commits
Author | SHA1 | Date | |
---|---|---|---|
a98c788a26 | |||
9c16af81c7 | |||
2df27100f0 | |||
6cf6538719 | |||
0fd3db3228 | |||
18835149e2 | |||
6c9779fb0d | |||
3e98f097ef | |||
183ac8fa2b | |||
9036f53e7d | |||
f7c04e469a | |||
b5f01c0d15 | |||
5a23cd34ad | |||
6e87f34c6f | |||
6618aa2e9b | |||
0d25a96f7e | |||
4f6d9d3a76 | |||
928f6f0c45 | |||
09e95ddcee | |||
2d003225bc | |||
de93cabd69 | |||
51489cca81 | |||
f7f4c3afb1 | |||
0821086e41 | |||
7a905fde63 | |||
d2882b1119 | |||
3a500598c5 | |||
42274917e0 | |||
8ba50f2729 | |||
f22071f061 | |||
d2312371a6 | |||
ba837c3c30 | |||
d85d83a0f5 | |||
62e8594c57 | |||
509f95ea30 | |||
43d0b55004 | |||
c0f130a077 | |||
90dc34380e | |||
286e41eb21 | |||
4973d0261d | |||
c4a62dfd68 | |||
4d6be0a507 | |||
b259ab7b0c | |||
e1ac5245c7 | |||
d4fea075af | |||
cef7fa79de | |||
ca05397dcd |
2
.github/workflows/build-code.yml
vendored
2
.github/workflows/build-code.yml
vendored
@ -33,4 +33,4 @@ jobs:
|
||||
run: yarn test
|
||||
|
||||
- name: Build application
|
||||
run: yarn build:all
|
||||
run: yarn build:production
|
||||
|
110
CHANGELOG.md
110
CHANGELOG.md
@ -5,6 +5,102 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## 1.301.0 - 2023-08-18
|
||||
|
||||
### Added
|
||||
|
||||
- Added the data export feature to the user account page
|
||||
- Added a currencies preset to the historical market data table of the admin control panel
|
||||
- Added the _OSS Friends_ page
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the localized meta data in `html` files
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the rows with cash positions in the holdings table
|
||||
- Fixed an issue with the date parsing in the historical market data editor of the admin control panel
|
||||
|
||||
## 1.300.0 - 2023-08-11
|
||||
|
||||
### Added
|
||||
|
||||
- Added more durations in the coupon system
|
||||
|
||||
### Changed
|
||||
|
||||
- Migrated the remaining requests from `bent` to `got`
|
||||
|
||||
## 1.299.1 - 2023-08-10
|
||||
|
||||
### Changed
|
||||
|
||||
- Optimized the activities import by allowing a different currency than the asset's official one
|
||||
- Added a timeout to the _EOD Historical Data_ requests
|
||||
- Migrated the requests from `bent` to `got` in the _EOD Historical Data_ service
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the editing of the emergency fund
|
||||
- Fixed the historical data gathering interval for asset profiles used as benchmarks having activities
|
||||
|
||||
## 1.298.0 - 2023-08-06
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the language localization for German (`de`)
|
||||
- Upgraded `ng-extract-i18n-merge` from version `2.6.0` to `2.7.0`
|
||||
- Upgraded `Nx` from version `16.5.5` to `16.6.0`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the styles of various components (card, progress, tab) after the upgrade to `@angular/material` `16`
|
||||
|
||||
## 1.297.4 - 2023-08-05
|
||||
|
||||
### Added
|
||||
|
||||
- Added the footer to the public page
|
||||
- Added a `copy-assets` `Nx` target to the client build
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the alignment of the region percentages on the allocations page
|
||||
- Improved the alignment of the region percentages on the public page
|
||||
- Improved the redirection of the home page to the localized home page
|
||||
- Improved the language localization for German (`de`)
|
||||
- Upgraded `angular` from version `15.2.5` to `16.1.8`
|
||||
- Upgraded `nestjs` from version `9.1.4` to `10.1.3`
|
||||
- Upgraded `Nx` from version `16.0.3` to `16.5.5`
|
||||
|
||||
## 1.296.0 - 2023-08-01
|
||||
|
||||
### Changed
|
||||
|
||||
- Optimized the validation in the activities import by reducing the list to unique asset profiles
|
||||
- Optimized the data gathering in the activities import
|
||||
|
||||
## 1.295.0 - 2023-07-30
|
||||
|
||||
### Added
|
||||
|
||||
- Added a step by step introduction for new users
|
||||
|
||||
### Fixed
|
||||
|
||||
- Removed the _Stay signed in_ setting on _Sign in with fingerprint_ activation
|
||||
|
||||
## 1.294.0 - 2023-07-29
|
||||
|
||||
### Changed
|
||||
|
||||
- Extended the allocations by market chart on the allocations page by unavailable data
|
||||
|
||||
### Fixed
|
||||
|
||||
- Considered liabilities in the total account value calculation
|
||||
|
||||
## 1.293.0 - 2023-07-26
|
||||
|
||||
### Added
|
||||
@ -532,7 +628,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Changed the slide toggles to checkboxes on the account page
|
||||
- Changed the slide toggles to checkboxes on the user account page
|
||||
- Changed the slide toggles to checkboxes in the admin control panel
|
||||
- Increased the density of the theme
|
||||
- Migrated the style of various components to `@angular/material` `15` (mdc)
|
||||
@ -1094,7 +1190,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the language selector on the account page
|
||||
- Improved the language selector on the user account page
|
||||
- Improved the wording in the _X-ray_ section (net worth instead of investment)
|
||||
- Extended the asset profile details dialog in the admin control panel
|
||||
- Updated the browserslist database
|
||||
@ -1512,7 +1608,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Added
|
||||
|
||||
- Added a language selector to the account page
|
||||
- Added a language selector to the user account page
|
||||
- Added support for translated labels in the value component
|
||||
|
||||
### Changed
|
||||
@ -1841,7 +1937,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Added
|
||||
|
||||
- Added the user id to the account page
|
||||
- Added the user id to the user account page
|
||||
- Added a new view with jobs of the queue to the admin control panel
|
||||
|
||||
### Changed
|
||||
@ -3496,7 +3592,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Changed
|
||||
|
||||
- Respected the cash balance on the analysis page
|
||||
- Improved the settings selectors on the account page
|
||||
- Improved the settings selectors on the user account page
|
||||
- Harmonized the slogan to "Open Source Wealth Management Software"
|
||||
|
||||
### Fixed
|
||||
@ -3962,7 +4058,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Added
|
||||
|
||||
- Added a gradient to the line charts
|
||||
- Added a selector to set the base currency on the account page
|
||||
- Added a selector to set the base currency on the user account page
|
||||
|
||||
## 0.81.0 - 06.04.2021
|
||||
|
||||
@ -4276,7 +4372,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Added the membership status to the account page
|
||||
- Added the membership status to the user account page
|
||||
|
||||
### Fixed
|
||||
|
||||
|
@ -33,7 +33,7 @@ COPY ./tsconfig.base.json tsconfig.base.json
|
||||
COPY ./libs libs
|
||||
COPY ./apps apps
|
||||
|
||||
RUN yarn build:all
|
||||
RUN yarn build:production
|
||||
|
||||
# Prepare the dist image with additional node_modules
|
||||
WORKDIR /ghostfolio/dist/apps/api
|
||||
@ -58,4 +58,4 @@ RUN apt update && apt install -y \
|
||||
COPY --from=builder /ghostfolio/dist/apps /ghostfolio/apps
|
||||
WORKDIR /ghostfolio/apps/api
|
||||
EXPOSE ${PORT:-3333}
|
||||
CMD [ "yarn", "start:prod" ]
|
||||
CMD [ "yarn", "start:production" ]
|
||||
|
@ -153,7 +153,6 @@ Please follow the instructions of the Ghostfolio [Unraid Community App](https://
|
||||
### Setup
|
||||
|
||||
1. Run `yarn install`
|
||||
1. Run `yarn build:dev` to build the source code including the assets
|
||||
1. Run `docker-compose --env-file ./.env -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io)
|
||||
1. Run `yarn database:setup` to initialize the database schema
|
||||
1. Start the server and the client (see [_Development_](#Development))
|
||||
@ -263,7 +262,9 @@ Deprecated: `GET http://localhost:3333/api/v1/auth/anonymous/<INSERT_SECURITY_TO
|
||||
|
||||
## Community Projects
|
||||
|
||||
- [ghostfolio-cli](https://github.com/DerAndereJohannes/ghostfolio-cli): Command-line interface to access your portfolio
|
||||
Discover a variety of community projects for Ghostfolio: https://github.com/topics/ghostfolio
|
||||
|
||||
Are you building your own project? Add the `ghostfolio` topic to your _GitHub_ repository to get listed as well. [Learn more →](https://docs.github.com/en/articles/classifying-your-repository-with-topics)
|
||||
|
||||
## Contributing
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
||||
"outputs": ["{options.outputPath}"]
|
||||
},
|
||||
"serve": {
|
||||
"executor": "@nx/node:node",
|
||||
"executor": "@nx/js:node",
|
||||
"options": {
|
||||
"buildTarget": "api:build"
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import {
|
||||
GATHER_ASSET_PROFILE_PROCESS,
|
||||
GATHER_ASSET_PROFILE_PROCESS_OPTIONS
|
||||
} from '@ghostfolio/common/config';
|
||||
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
|
||||
import {
|
||||
AdminData,
|
||||
AdminMarketData,
|
||||
@ -37,7 +38,7 @@ import {
|
||||
import { REQUEST } from '@nestjs/core';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
import { DataSource, MarketData, Prisma, SymbolProfile } from '@prisma/client';
|
||||
import { isDate } from 'date-fns';
|
||||
import { isDate, parseISO } from 'date-fns';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
|
||||
import { AdminService } from './admin.service';
|
||||
@ -116,7 +117,7 @@ export class AdminController {
|
||||
name: GATHER_ASSET_PROFILE_PROCESS,
|
||||
opts: {
|
||||
...GATHER_ASSET_PROFILE_PROCESS_OPTIONS,
|
||||
jobId: `${dataSource}-${symbol}`
|
||||
jobId: getAssetProfileIdentifier({ dataSource, symbol })
|
||||
}
|
||||
};
|
||||
})
|
||||
@ -152,7 +153,7 @@ export class AdminController {
|
||||
name: GATHER_ASSET_PROFILE_PROCESS,
|
||||
opts: {
|
||||
...GATHER_ASSET_PROFILE_PROCESS_OPTIONS,
|
||||
jobId: `${dataSource}-${symbol}`
|
||||
jobId: getAssetProfileIdentifier({ dataSource, symbol })
|
||||
}
|
||||
};
|
||||
})
|
||||
@ -185,7 +186,7 @@ export class AdminController {
|
||||
name: GATHER_ASSET_PROFILE_PROCESS,
|
||||
opts: {
|
||||
...GATHER_ASSET_PROFILE_PROCESS_OPTIONS,
|
||||
jobId: `${dataSource}-${symbol}`
|
||||
jobId: getAssetProfileIdentifier({ dataSource, symbol })
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -232,7 +233,7 @@ export class AdminController {
|
||||
);
|
||||
}
|
||||
|
||||
const date = new Date(dateString);
|
||||
const date = parseISO(dateString);
|
||||
|
||||
if (!isDate(date)) {
|
||||
throw new HttpException(
|
||||
@ -332,7 +333,7 @@ export class AdminController {
|
||||
);
|
||||
}
|
||||
|
||||
const date = new Date(dateString);
|
||||
const date = parseISO(dateString);
|
||||
|
||||
return this.marketDataService.updateMarketData({
|
||||
data: { marketPrice: data.marketPrice, state: 'CLOSE' },
|
||||
|
@ -6,14 +6,12 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d
|
||||
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
|
||||
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
|
||||
import {
|
||||
DEFAULT_PAGE_SIZE,
|
||||
PROPERTY_CURRENCIES
|
||||
} from '@ghostfolio/common/config';
|
||||
import { PROPERTY_CURRENCIES } from '@ghostfolio/common/config';
|
||||
import {
|
||||
AdminData,
|
||||
AdminMarketData,
|
||||
AdminMarketDataDetails,
|
||||
AdminMarketDataItem,
|
||||
Filter,
|
||||
UniqueAsset
|
||||
} from '@ghostfolio/common/interfaces';
|
||||
@ -121,7 +119,9 @@ export class AdminService {
|
||||
[{ symbol: 'asc' }];
|
||||
const where: Prisma.SymbolProfileWhereInput = {};
|
||||
|
||||
if (
|
||||
if (presetId === 'CURRENCIES') {
|
||||
return this.getMarketDataForCurrencies();
|
||||
} else if (
|
||||
presetId === 'ETF_WITHOUT_COUNTRIES' ||
|
||||
presetId === 'ETF_WITHOUT_SECTORS'
|
||||
) {
|
||||
@ -313,6 +313,36 @@ export class AdminService {
|
||||
return response;
|
||||
}
|
||||
|
||||
private async getMarketDataForCurrencies(): Promise<AdminMarketData> {
|
||||
const marketDataItems = await this.prismaService.marketData.groupBy({
|
||||
_count: true,
|
||||
by: ['dataSource', 'symbol']
|
||||
});
|
||||
|
||||
const marketData: AdminMarketDataItem[] = this.exchangeRateDataService
|
||||
.getCurrencyPairs()
|
||||
.map(({ dataSource, symbol }) => {
|
||||
const marketDataItemCount =
|
||||
marketDataItems.find((marketDataItem) => {
|
||||
return (
|
||||
marketDataItem.dataSource === dataSource &&
|
||||
marketDataItem.symbol === symbol
|
||||
);
|
||||
})?._count ?? 0;
|
||||
|
||||
return {
|
||||
dataSource,
|
||||
marketDataItemCount,
|
||||
symbol,
|
||||
assetClass: 'CASH',
|
||||
countriesCount: 0,
|
||||
sectorsCount: 0
|
||||
};
|
||||
});
|
||||
|
||||
return { marketData, count: marketData.length };
|
||||
}
|
||||
|
||||
private async getUsersWithAnalytics(): Promise<AdminData['users']> {
|
||||
let orderBy: any = {
|
||||
createdAt: 'desc'
|
||||
|
@ -7,11 +7,16 @@ import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-
|
||||
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
|
||||
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
|
||||
import { TwitterBotModule } from '@ghostfolio/api/services/twitter-bot/twitter-bot.module';
|
||||
import {
|
||||
DEFAULT_LANGUAGE_CODE,
|
||||
SUPPORTED_LANGUAGE_CODES
|
||||
} from '@ghostfolio/common/config';
|
||||
import { BullModule } from '@nestjs/bull';
|
||||
import { MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common';
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { ScheduleModule } from '@nestjs/schedule';
|
||||
import { ServeStaticModule } from '@nestjs/serve-static';
|
||||
import { StatusCodes } from 'http-status-codes';
|
||||
|
||||
import { AccessModule } from './access/access.module';
|
||||
import { AccountModule } from './account/account.module';
|
||||
@ -23,7 +28,6 @@ import { BenchmarkModule } from './benchmark/benchmark.module';
|
||||
import { CacheModule } from './cache/cache.module';
|
||||
import { ExchangeRateModule } from './exchange-rate/exchange-rate.module';
|
||||
import { ExportModule } from './export/export.module';
|
||||
import { FrontendMiddleware } from './frontend.middleware';
|
||||
import { HealthModule } from './health/health.module';
|
||||
import { ImportModule } from './import/import.module';
|
||||
import { InfoModule } from './info/info.module';
|
||||
@ -32,6 +36,7 @@ import { OrderModule } from './order/order.module';
|
||||
import { PlatformModule } from './platform/platform.module';
|
||||
import { PortfolioModule } from './portfolio/portfolio.module';
|
||||
import { RedisCacheModule } from './redis-cache/redis-cache.module';
|
||||
import { SitemapModule } from './sitemap/sitemap.module';
|
||||
import { SubscriptionModule } from './subscription/subscription.module';
|
||||
import { SymbolModule } from './symbol/symbol.module';
|
||||
import { UserModule } from './user/user.module';
|
||||
@ -70,19 +75,30 @@ import { UserModule } from './user/user.module';
|
||||
RedisCacheModule,
|
||||
ScheduleModule.forRoot(),
|
||||
ServeStaticModule.forRoot({
|
||||
serveStaticOptions: {
|
||||
/*etag: false // Disable etag header to fix PWA
|
||||
setHeaders: (res, path) => {
|
||||
if (path.includes('ngsw.json')) {
|
||||
// Disable cache (https://stackoverflow.com/questions/22632593/how-to-disable-webpage-caching-in-expressjs-nodejs/39775595)
|
||||
// https://gertjans.home.xs4all.nl/javascript/cache-control.html#no-cache
|
||||
res.set('Cache-Control', 'no-cache, no-store, must-revalidate');
|
||||
}
|
||||
}*/
|
||||
},
|
||||
exclude: ['/api*', '/sitemap.xml'],
|
||||
rootPath: join(__dirname, '..', 'client'),
|
||||
exclude: ['/api*']
|
||||
serveStaticOptions: {
|
||||
setHeaders: (res) => {
|
||||
if (res.req?.path === '/') {
|
||||
let languageCode = DEFAULT_LANGUAGE_CODE;
|
||||
|
||||
try {
|
||||
const code = res.req.headers['accept-language']
|
||||
.split(',')[0]
|
||||
.split('-')[0];
|
||||
|
||||
if (SUPPORTED_LANGUAGE_CODES.includes(code)) {
|
||||
languageCode = code;
|
||||
}
|
||||
} catch {}
|
||||
|
||||
res.set('Location', `/${languageCode}`);
|
||||
res.statusCode = StatusCodes.MOVED_PERMANENTLY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
SitemapModule,
|
||||
SubscriptionModule,
|
||||
SymbolModule,
|
||||
TwitterBotModule,
|
||||
@ -91,10 +107,4 @@ import { UserModule } from './user/user.module';
|
||||
controllers: [AppController],
|
||||
providers: [CronService]
|
||||
})
|
||||
export class AppModule {
|
||||
configure(consumer: MiddlewareConsumer) {
|
||||
consumer
|
||||
.apply(FrontendMiddleware)
|
||||
.forRoutes({ path: '*', method: RequestMethod.ALL });
|
||||
}
|
||||
}
|
||||
export class AppModule {}
|
||||
|
@ -10,6 +10,7 @@ import { AuthGuard } from '@nestjs/passport';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
|
||||
import { ExchangeRateService } from './exchange-rate.service';
|
||||
import { parseISO } from 'date-fns';
|
||||
|
||||
@Controller('exchange-rate')
|
||||
export class ExchangeRateController {
|
||||
@ -23,7 +24,7 @@ export class ExchangeRateController {
|
||||
@Param('dateString') dateString: string,
|
||||
@Param('symbol') symbol: string
|
||||
): Promise<IDataProviderHistoricalResponse> {
|
||||
const date = new Date(dateString);
|
||||
const date = parseISO(dateString);
|
||||
|
||||
const exchangeRate = await this.exchangeRateService.getExchangeRate({
|
||||
date,
|
||||
|
@ -1,249 +0,0 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import { environment } from '@ghostfolio/api/environments/environment';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
||||
import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config';
|
||||
import { DATE_FORMAT, getYesterday } from '@ghostfolio/common/helper';
|
||||
import { Injectable, NestMiddleware } from '@nestjs/common';
|
||||
import { format } from 'date-fns';
|
||||
import { NextFunction, Request, Response } from 'express';
|
||||
|
||||
@Injectable()
|
||||
export class FrontendMiddleware implements NestMiddleware {
|
||||
public indexHtmlDe = '';
|
||||
public indexHtmlEn = '';
|
||||
public indexHtmlEs = '';
|
||||
public indexHtmlFr = '';
|
||||
public indexHtmlIt = '';
|
||||
public indexHtmlNl = '';
|
||||
public indexHtmlPt = '';
|
||||
public sitemapXml = '';
|
||||
|
||||
private static readonly DEFAULT_DESCRIPTION =
|
||||
'Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms.';
|
||||
|
||||
public constructor(
|
||||
private readonly configurationService: ConfigurationService
|
||||
) {
|
||||
try {
|
||||
this.indexHtmlDe = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('de'),
|
||||
'utf8'
|
||||
);
|
||||
this.indexHtmlEn = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile(DEFAULT_LANGUAGE_CODE),
|
||||
'utf8'
|
||||
);
|
||||
this.indexHtmlEs = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('es'),
|
||||
'utf8'
|
||||
);
|
||||
this.indexHtmlFr = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('fr'),
|
||||
'utf8'
|
||||
);
|
||||
this.indexHtmlIt = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('it'),
|
||||
'utf8'
|
||||
);
|
||||
this.indexHtmlNl = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('nl'),
|
||||
'utf8'
|
||||
);
|
||||
this.indexHtmlPt = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('pt'),
|
||||
'utf8'
|
||||
);
|
||||
this.sitemapXml = fs.readFileSync(
|
||||
path.join(__dirname, 'assets', 'sitemap.xml'),
|
||||
'utf8'
|
||||
);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
public use(request: Request, response: Response, next: NextFunction) {
|
||||
const currentDate = format(new Date(), DATE_FORMAT);
|
||||
let featureGraphicPath = 'assets/cover.png';
|
||||
let title = 'Ghostfolio – Open Source Wealth Management Software';
|
||||
|
||||
if (request.path.startsWith('/en/blog/2022/08/500-stars-on-github')) {
|
||||
featureGraphicPath = 'assets/images/blog/500-stars-on-github.jpg';
|
||||
title = `500 Stars - ${title}`;
|
||||
} else if (request.path.startsWith('/en/blog/2022/10/hacktoberfest-2022')) {
|
||||
featureGraphicPath = 'assets/images/blog/hacktoberfest-2022.png';
|
||||
title = `Hacktoberfest 2022 - ${title}`;
|
||||
} else if (request.path.startsWith('/en/blog/2022/11/black-friday-2022')) {
|
||||
featureGraphicPath = 'assets/images/blog/black-friday-2022.jpg';
|
||||
title = `Black Friday 2022 - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith(
|
||||
'/en/blog/2022/12/the-importance-of-tracking-your-personal-finances'
|
||||
)
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/20221226.jpg';
|
||||
title = `The importance of tracking your personal finances - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith(
|
||||
'/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt'
|
||||
)
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/ghostfolio-x-sackgeld.png';
|
||||
title = `Ghostfolio auf Sackgeld.com vorgestellt - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith('/en/blog/2023/02/ghostfolio-meets-umbrel')
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/ghostfolio-x-umbrel.png';
|
||||
title = `Ghostfolio meets Umbrel - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith(
|
||||
'/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github'
|
||||
)
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/1000-stars-on-github.jpg';
|
||||
title = `Ghostfolio reaches 1’000 Stars on GitHub - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith(
|
||||
'/en/blog/2023/05/unlock-your-financial-potential-with-ghostfolio'
|
||||
)
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/20230520.jpg';
|
||||
title = `Unlock your Financial Potential with Ghostfolio - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith('/en/blog/2023/07/exploring-the-path-to-fire')
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/20230701.jpg';
|
||||
title = `Exploring the Path to FIRE - ${title}`;
|
||||
}
|
||||
|
||||
if (
|
||||
request.path.startsWith('/api/') ||
|
||||
this.isFileRequest(request.url) ||
|
||||
!environment.production
|
||||
) {
|
||||
// Skip
|
||||
next();
|
||||
} else if (request.path === '/sitemap.xml') {
|
||||
response.setHeader('content-type', 'application/xml');
|
||||
response.send(
|
||||
this.interpolate(this.sitemapXml, {
|
||||
currentDate: format(getYesterday(), DATE_FORMAT)
|
||||
})
|
||||
);
|
||||
} else if (request.path === '/de' || request.path.startsWith('/de/')) {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlDe, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description:
|
||||
'Mit dem Finanz-Dashboard Ghostfolio können Sie Ihr Vermögen in Form von Aktien, ETFs oder Kryptowährungen verteilt über mehrere Finanzinstitute überwachen.',
|
||||
languageCode: 'de',
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
} else if (request.path === '/es' || request.path.startsWith('/es/')) {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlEs, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description:
|
||||
'Ghostfolio es un dashboard de finanzas personales para hacer un seguimiento de tus activos como acciones, ETFs o criptodivisas a través de múltiples plataformas.',
|
||||
languageCode: 'es',
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
} else if (request.path === '/fr' || request.path.startsWith('/fr/')) {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlFr, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description:
|
||||
'Ghostfolio est un dashboard de finances personnelles qui permet de suivre vos actifs comme les actions, les ETF ou les crypto-monnaies sur plusieurs plateformes.',
|
||||
languageCode: 'fr',
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
} else if (request.path === '/it' || request.path.startsWith('/it/')) {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlIt, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description:
|
||||
'Ghostfolio è un dashboard di finanza personale per tenere traccia delle vostre attività come azioni, ETF o criptovalute su più piattaforme.',
|
||||
languageCode: 'it',
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
} else if (request.path === '/nl' || request.path.startsWith('/nl/')) {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlNl, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description:
|
||||
'Ghostfolio is een persoonlijk financieel dashboard om uw activa zoals aandelen, ETF’s of cryptocurrencies over meerdere platforms bij te houden.',
|
||||
languageCode: 'nl',
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
} else if (request.path === '/pt' || request.path.startsWith('/pt/')) {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlPt, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description:
|
||||
'Ghostfolio é um dashboard de finanças pessoais para acompanhar os seus activos como acções, ETFs ou criptomoedas em múltiplas plataformas.',
|
||||
languageCode: 'pt',
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
} else {
|
||||
response.send(
|
||||
this.interpolate(this.indexHtmlEn, {
|
||||
currentDate,
|
||||
featureGraphicPath,
|
||||
title,
|
||||
description: FrontendMiddleware.DEFAULT_DESCRIPTION,
|
||||
languageCode: DEFAULT_LANGUAGE_CODE,
|
||||
path: request.path,
|
||||
rootUrl: this.configurationService.get('ROOT_URL')
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private getPathOfIndexHtmlFile(aLocale: string) {
|
||||
return path.join(__dirname, '..', 'client', aLocale, 'index.html');
|
||||
}
|
||||
|
||||
private interpolate(template: string, context: any) {
|
||||
return template.replace(/[$]{([^}]+)}/g, (_, objectPath) => {
|
||||
const properties = objectPath.split('.');
|
||||
return properties.reduce(
|
||||
(previous, current) => previous?.[current],
|
||||
context
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private isFileRequest(filename: string) {
|
||||
if (filename === '/assets/LICENSE') {
|
||||
return true;
|
||||
} else if (filename === '/sitemap.xml' || filename.includes('auth/ey')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return filename.split('.').pop() !== filename;
|
||||
}
|
||||
}
|
@ -8,10 +8,15 @@ import {
|
||||
import { OrderService } from '@ghostfolio/api/app/order/order.service';
|
||||
import { PlatformService } from '@ghostfolio/api/app/platform/platform.service';
|
||||
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
|
||||
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering/data-gathering.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 { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
|
||||
import { parseDate } from '@ghostfolio/common/helper';
|
||||
import {
|
||||
DATE_FORMAT,
|
||||
getAssetProfileIdentifier,
|
||||
parseDate
|
||||
} from '@ghostfolio/common/helper';
|
||||
import { UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import {
|
||||
AccountWithPlatform,
|
||||
@ -20,13 +25,15 @@ import {
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { DataSource, Prisma, SymbolProfile } from '@prisma/client';
|
||||
import Big from 'big.js';
|
||||
import { endOfToday, isAfter, isSameDay, parseISO } from 'date-fns';
|
||||
import { endOfToday, format, isAfter, isSameDay, parseISO } from 'date-fns';
|
||||
import { uniqBy } from 'lodash';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
@Injectable()
|
||||
export class ImportService {
|
||||
public constructor(
|
||||
private readonly accountService: AccountService,
|
||||
private readonly dataGatheringService: DataGatheringService,
|
||||
private readonly dataProviderService: DataProviderService,
|
||||
private readonly exchangeRateDataService: ExchangeRateDataService,
|
||||
private readonly orderService: OrderService,
|
||||
@ -220,8 +227,7 @@ export class ImportService {
|
||||
|
||||
const assetProfiles = await this.validateActivities({
|
||||
activitiesDto,
|
||||
maxActivitiesToImport,
|
||||
userId
|
||||
maxActivitiesToImport
|
||||
});
|
||||
|
||||
const activitiesExtendedWithErrors = await this.extendActivitiesWithErrors({
|
||||
@ -243,17 +249,47 @@ export class ImportService {
|
||||
|
||||
const activities: Activity[] = [];
|
||||
|
||||
for (const {
|
||||
accountId,
|
||||
comment,
|
||||
date,
|
||||
error,
|
||||
fee,
|
||||
quantity,
|
||||
SymbolProfile: assetProfile,
|
||||
type,
|
||||
unitPrice
|
||||
} of activitiesExtendedWithErrors) {
|
||||
for (let [
|
||||
index,
|
||||
{
|
||||
accountId,
|
||||
comment,
|
||||
date,
|
||||
error,
|
||||
fee,
|
||||
quantity,
|
||||
SymbolProfile,
|
||||
type,
|
||||
unitPrice
|
||||
}
|
||||
] of activitiesExtendedWithErrors.entries()) {
|
||||
const assetProfile = assetProfiles[
|
||||
getAssetProfileIdentifier({
|
||||
dataSource: SymbolProfile.dataSource,
|
||||
symbol: SymbolProfile.symbol
|
||||
})
|
||||
] ?? {
|
||||
currency: SymbolProfile.currency,
|
||||
dataSource: SymbolProfile.dataSource,
|
||||
symbol: SymbolProfile.symbol
|
||||
};
|
||||
const {
|
||||
assetClass,
|
||||
assetSubClass,
|
||||
countries,
|
||||
createdAt,
|
||||
currency,
|
||||
dataSource,
|
||||
id,
|
||||
isin,
|
||||
name,
|
||||
scraperConfiguration,
|
||||
sectors,
|
||||
symbol,
|
||||
symbolMapping,
|
||||
url,
|
||||
updatedAt
|
||||
} = assetProfile;
|
||||
const validatedAccount = accounts.find(({ id }) => {
|
||||
return id === accountId;
|
||||
});
|
||||
@ -264,6 +300,35 @@ export class ImportService {
|
||||
Account?: { id: string; name: string };
|
||||
});
|
||||
|
||||
if (SymbolProfile.currency !== assetProfile.currency) {
|
||||
// Convert the unit price and fee to the asset currency if the imported
|
||||
// activity is in a different currency
|
||||
unitPrice = await this.exchangeRateDataService.toCurrencyAtDate(
|
||||
unitPrice,
|
||||
SymbolProfile.currency,
|
||||
assetProfile.currency,
|
||||
date
|
||||
);
|
||||
|
||||
if (!unitPrice) {
|
||||
throw new Error(
|
||||
`activities.${index} historical exchange rate at ${format(
|
||||
date,
|
||||
DATE_FORMAT
|
||||
)} is not available from "${SymbolProfile.currency}" to "${
|
||||
assetProfile.currency
|
||||
}"`
|
||||
);
|
||||
}
|
||||
|
||||
fee = await this.exchangeRateDataService.toCurrencyAtDate(
|
||||
fee,
|
||||
SymbolProfile.currency,
|
||||
assetProfile.currency,
|
||||
date
|
||||
);
|
||||
}
|
||||
|
||||
if (isDryRun) {
|
||||
order = {
|
||||
comment,
|
||||
@ -279,23 +344,22 @@ export class ImportService {
|
||||
id: uuidv4(),
|
||||
isDraft: isAfter(date, endOfToday()),
|
||||
SymbolProfile: {
|
||||
assetClass: assetProfile.assetClass,
|
||||
assetSubClass: assetProfile.assetSubClass,
|
||||
comment: assetProfile.comment,
|
||||
countries: assetProfile.countries,
|
||||
createdAt: assetProfile.createdAt,
|
||||
currency: assetProfile.currency,
|
||||
dataSource: assetProfile.dataSource,
|
||||
id: assetProfile.id,
|
||||
isin: assetProfile.isin,
|
||||
name: assetProfile.name,
|
||||
scraperConfiguration: assetProfile.scraperConfiguration,
|
||||
sectors: assetProfile.sectors,
|
||||
symbol: assetProfile.currency,
|
||||
symbolMapping: assetProfile.symbolMapping,
|
||||
updatedAt: assetProfile.updatedAt,
|
||||
url: assetProfile.url,
|
||||
...assetProfiles[assetProfile.symbol]
|
||||
assetClass,
|
||||
assetSubClass,
|
||||
countries,
|
||||
createdAt,
|
||||
currency,
|
||||
dataSource,
|
||||
id,
|
||||
isin,
|
||||
name,
|
||||
scraperConfiguration,
|
||||
sectors,
|
||||
symbol,
|
||||
symbolMapping,
|
||||
updatedAt,
|
||||
url,
|
||||
comment: assetProfile.comment
|
||||
},
|
||||
Account: validatedAccount,
|
||||
symbolProfileId: undefined,
|
||||
@ -318,14 +382,14 @@ export class ImportService {
|
||||
SymbolProfile: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
currency: assetProfile.currency,
|
||||
dataSource: assetProfile.dataSource,
|
||||
symbol: assetProfile.symbol
|
||||
currency,
|
||||
dataSource,
|
||||
symbol
|
||||
},
|
||||
where: {
|
||||
dataSource_symbol: {
|
||||
dataSource: assetProfile.dataSource,
|
||||
symbol: assetProfile.symbol
|
||||
dataSource,
|
||||
symbol
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -337,24 +401,49 @@ export class ImportService {
|
||||
|
||||
const value = new Big(quantity).mul(unitPrice).toNumber();
|
||||
|
||||
//@ts-ignore
|
||||
activities.push({
|
||||
...order,
|
||||
error,
|
||||
value,
|
||||
feeInBaseCurrency: this.exchangeRateDataService.toCurrency(
|
||||
fee,
|
||||
assetProfile.currency,
|
||||
currency,
|
||||
userCurrency
|
||||
),
|
||||
//@ts-ignore
|
||||
SymbolProfile: assetProfile,
|
||||
valueInBaseCurrency: this.exchangeRateDataService.toCurrency(
|
||||
value,
|
||||
assetProfile.currency,
|
||||
currency,
|
||||
userCurrency
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
activities.sort((activity1, activity2) => {
|
||||
return Number(activity1.date) - Number(activity2.date);
|
||||
});
|
||||
|
||||
if (!isDryRun) {
|
||||
// Gather symbol data in the background, if not dry run
|
||||
const uniqueActivities = uniqBy(activities, ({ SymbolProfile }) => {
|
||||
return getAssetProfileIdentifier({
|
||||
dataSource: SymbolProfile.dataSource,
|
||||
symbol: SymbolProfile.symbol
|
||||
});
|
||||
});
|
||||
|
||||
this.dataGatheringService.gatherSymbols(
|
||||
uniqueActivities.map(({ date, SymbolProfile }) => {
|
||||
return {
|
||||
date,
|
||||
dataSource: SymbolProfile.dataSource,
|
||||
symbol: SymbolProfile.symbol
|
||||
};
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
return activities;
|
||||
}
|
||||
|
||||
@ -446,25 +535,30 @@ export class ImportService {
|
||||
|
||||
private async validateActivities({
|
||||
activitiesDto,
|
||||
maxActivitiesToImport,
|
||||
userId
|
||||
maxActivitiesToImport
|
||||
}: {
|
||||
activitiesDto: Partial<CreateOrderDto>[];
|
||||
maxActivitiesToImport: number;
|
||||
userId: string;
|
||||
}) {
|
||||
if (activitiesDto?.length > maxActivitiesToImport) {
|
||||
throw new Error(`Too many activities (${maxActivitiesToImport} at most)`);
|
||||
}
|
||||
|
||||
const assetProfiles: {
|
||||
[symbol: string]: Partial<SymbolProfile>;
|
||||
[assetProfileIdentifier: string]: Partial<SymbolProfile>;
|
||||
} = {};
|
||||
|
||||
const uniqueActivitiesDto = uniqBy(
|
||||
activitiesDto,
|
||||
({ dataSource, symbol }) => {
|
||||
return getAssetProfileIdentifier({ dataSource, symbol });
|
||||
}
|
||||
);
|
||||
|
||||
for (const [
|
||||
index,
|
||||
{ currency, dataSource, symbol }
|
||||
] of activitiesDto.entries()) {
|
||||
] of uniqueActivitiesDto.entries()) {
|
||||
if (dataSource !== 'MANUAL') {
|
||||
const assetProfile = (
|
||||
await this.dataProviderService.getAssetProfiles([
|
||||
@ -472,19 +566,26 @@ export class ImportService {
|
||||
])
|
||||
)?.[symbol];
|
||||
|
||||
if (assetProfile === undefined) {
|
||||
if (!assetProfile) {
|
||||
throw new Error(
|
||||
`activities.${index}.symbol ("${symbol}") is not valid for the specified data source ("${dataSource}")`
|
||||
);
|
||||
}
|
||||
|
||||
if (assetProfile.currency !== currency) {
|
||||
if (
|
||||
assetProfile.currency !== currency &&
|
||||
!this.exchangeRateDataService.hasCurrencyPair(
|
||||
currency,
|
||||
assetProfile.currency
|
||||
)
|
||||
) {
|
||||
throw new Error(
|
||||
`activities.${index}.currency ("${currency}") does not match with "${assetProfile.currency}"`
|
||||
`activities.${index}.currency ("${currency}") does not match with "${assetProfile.currency}" and no exchange rate is available from "${currency}" to "${assetProfile.currency}"`
|
||||
);
|
||||
}
|
||||
|
||||
assetProfiles[symbol] = assetProfile;
|
||||
assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })] =
|
||||
assetProfile;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,9 +30,9 @@ import { permissions } from '@ghostfolio/common/permissions';
|
||||
import { SubscriptionOffer } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
import * as bent from 'bent';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { format, subDays } from 'date-fns';
|
||||
import got from 'got';
|
||||
|
||||
@Injectable()
|
||||
export class InfoService {
|
||||
@ -172,17 +172,13 @@ export class InfoService {
|
||||
|
||||
private async countDockerHubPulls(): Promise<number> {
|
||||
try {
|
||||
const get = bent(
|
||||
const { pull_count } = await got(
|
||||
`https://hub.docker.com/v2/repositories/ghostfolio/ghostfolio`,
|
||||
'GET',
|
||||
'json',
|
||||
200,
|
||||
{
|
||||
'User-Agent': 'request'
|
||||
headers: { 'User-Agent': 'request' }
|
||||
}
|
||||
);
|
||||
).json<any>();
|
||||
|
||||
const { pull_count } = await get();
|
||||
return pull_count;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'InfoService');
|
||||
@ -193,16 +189,9 @@ export class InfoService {
|
||||
|
||||
private async countGitHubContributors(): Promise<number> {
|
||||
try {
|
||||
const get = bent(
|
||||
'https://github.com/ghostfolio/ghostfolio',
|
||||
'GET',
|
||||
'string',
|
||||
200,
|
||||
{}
|
||||
);
|
||||
const { body } = await got('https://github.com/ghostfolio/ghostfolio');
|
||||
|
||||
const html = await get();
|
||||
const $ = cheerio.load(html);
|
||||
const $ = cheerio.load(body);
|
||||
|
||||
return extractNumberFromString(
|
||||
$(
|
||||
@ -218,17 +207,13 @@ export class InfoService {
|
||||
|
||||
private async countGitHubStargazers(): Promise<number> {
|
||||
try {
|
||||
const get = bent(
|
||||
const { stargazers_count } = await got(
|
||||
`https://api.github.com/repos/ghostfolio/ghostfolio`,
|
||||
'GET',
|
||||
'json',
|
||||
200,
|
||||
{
|
||||
'User-Agent': 'request'
|
||||
headers: { 'User-Agent': 'request' }
|
||||
}
|
||||
);
|
||||
).json<any>();
|
||||
|
||||
const { stargazers_count } = await get();
|
||||
return stargazers_count;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'InfoService');
|
||||
@ -346,22 +331,21 @@ export class InfoService {
|
||||
PROPERTY_BETTER_UPTIME_MONITOR_ID
|
||||
)) as string;
|
||||
|
||||
const get = bent(
|
||||
const { data } = await got(
|
||||
`https://betteruptime.com/api/v2/monitors/${monitorId}/sla?from=${format(
|
||||
subDays(new Date(), 90),
|
||||
DATE_FORMAT
|
||||
)}&to${format(new Date(), DATE_FORMAT)}`,
|
||||
'GET',
|
||||
'json',
|
||||
200,
|
||||
{
|
||||
Authorization: `Bearer ${this.configurationService.get(
|
||||
'BETTER_UPTIME_API_KEY'
|
||||
)}`
|
||||
}
|
||||
);
|
||||
|
||||
const { data } = await get();
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${this.configurationService.get(
|
||||
'BETTER_UPTIME_API_KEY'
|
||||
)}`
|
||||
}
|
||||
}
|
||||
).json<any>();
|
||||
|
||||
return data.attributes.availability / 100;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'InfoService');
|
||||
|
@ -2,7 +2,7 @@ import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/sy
|
||||
import { UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import { HttpException, Injectable } from '@nestjs/common';
|
||||
import { DataSource } from '@prisma/client';
|
||||
import * as bent from 'bent';
|
||||
import got from 'got';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
|
||||
@Injectable()
|
||||
@ -41,15 +41,11 @@ export class LogoService {
|
||||
}
|
||||
|
||||
private getBuffer(aUrl: string) {
|
||||
const get = bent(
|
||||
return got(
|
||||
`https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=${aUrl}&size=64`,
|
||||
'GET',
|
||||
'buffer',
|
||||
200,
|
||||
{
|
||||
'User-Agent': 'request'
|
||||
headers: { 'User-Agent': 'request' }
|
||||
}
|
||||
);
|
||||
return get();
|
||||
).buffer();
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/
|
||||
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor';
|
||||
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor';
|
||||
import { ApiService } from '@ghostfolio/api/services/api/api.service';
|
||||
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering/data-gathering.service';
|
||||
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
@ -36,6 +37,7 @@ import { UpdateOrderDto } from './update-order.dto';
|
||||
export class OrderController {
|
||||
public constructor(
|
||||
private readonly apiService: ApiService,
|
||||
private readonly dataGatheringService: DataGatheringService,
|
||||
private readonly impersonationService: ImpersonationService,
|
||||
private readonly orderService: OrderService,
|
||||
@Inject(REQUEST) private readonly request: RequestWithUser
|
||||
@ -123,7 +125,7 @@ export class OrderController {
|
||||
);
|
||||
}
|
||||
|
||||
return this.orderService.createOrder({
|
||||
const order = await this.orderService.createOrder({
|
||||
...data,
|
||||
date: parseISO(data.date),
|
||||
SymbolProfile: {
|
||||
@ -144,6 +146,19 @@ export class OrderController {
|
||||
User: { connect: { id: this.request.user.id } },
|
||||
userId: this.request.user.id
|
||||
});
|
||||
|
||||
if (!order.isDraft) {
|
||||
// Gather symbol data in the background, if not draft
|
||||
this.dataGatheringService.gatherSymbols([
|
||||
{
|
||||
dataSource: data.dataSource,
|
||||
date: order.date,
|
||||
symbol: data.symbol
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
return order;
|
||||
}
|
||||
|
||||
@Put(':id')
|
||||
|
@ -7,6 +7,7 @@ import {
|
||||
GATHER_ASSET_PROFILE_PROCESS,
|
||||
GATHER_ASSET_PROFILE_PROCESS_OPTIONS
|
||||
} from '@ghostfolio/common/config';
|
||||
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
|
||||
import { Filter } from '@ghostfolio/common/interfaces';
|
||||
import { OrderWithAccount } from '@ghostfolio/common/types';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
@ -117,7 +118,7 @@ export class OrderService {
|
||||
};
|
||||
}
|
||||
|
||||
await this.dataGatheringService.addJobToQueue({
|
||||
this.dataGatheringService.addJobToQueue({
|
||||
data: {
|
||||
dataSource: data.SymbolProfile.connectOrCreate.create.dataSource,
|
||||
symbol: data.SymbolProfile.connectOrCreate.create.symbol
|
||||
@ -125,26 +126,13 @@ export class OrderService {
|
||||
name: GATHER_ASSET_PROFILE_PROCESS,
|
||||
opts: {
|
||||
...GATHER_ASSET_PROFILE_PROCESS_OPTIONS,
|
||||
jobId: `${data.SymbolProfile.connectOrCreate.create.dataSource}-${data.SymbolProfile.connectOrCreate.create.symbol}`
|
||||
jobId: getAssetProfileIdentifier({
|
||||
dataSource: data.SymbolProfile.connectOrCreate.create.dataSource,
|
||||
symbol: data.SymbolProfile.connectOrCreate.create.symbol
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
const isDraft =
|
||||
data.type === 'LIABILITY'
|
||||
? false
|
||||
: isAfter(data.date as Date, endOfToday());
|
||||
|
||||
if (!isDraft) {
|
||||
// Gather symbol data of order in the background, if not draft
|
||||
this.dataGatheringService.gatherSymbols([
|
||||
{
|
||||
dataSource: data.SymbolProfile.connectOrCreate.create.dataSource,
|
||||
date: <Date>data.date,
|
||||
symbol: data.SymbolProfile.connectOrCreate.create.symbol
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
delete data.accountId;
|
||||
delete data.assetClass;
|
||||
delete data.assetSubClass;
|
||||
@ -162,6 +150,11 @@ export class OrderService {
|
||||
|
||||
const orderData: Prisma.OrderCreateInput = data;
|
||||
|
||||
const isDraft =
|
||||
data.type === 'LIABILITY'
|
||||
? false
|
||||
: isAfter(data.date as Date, endOfToday());
|
||||
|
||||
const order = await this.prismaService.order.create({
|
||||
data: {
|
||||
...orderData,
|
||||
|
@ -540,11 +540,13 @@ export class PortfolioService {
|
||||
const dataProviderResponse = dataProviderResponses[item.symbol];
|
||||
|
||||
const markets: PortfolioPosition['markets'] = {
|
||||
[UNKNOWN_KEY]: 0,
|
||||
developedMarkets: 0,
|
||||
emergingMarkets: 0,
|
||||
otherMarkets: 0
|
||||
};
|
||||
const marketsAdvanced: PortfolioPosition['marketsAdvanced'] = {
|
||||
[UNKNOWN_KEY]: 0,
|
||||
asiaPacific: 0,
|
||||
emergingMarkets: 0,
|
||||
europe: 0,
|
||||
@ -553,48 +555,58 @@ export class PortfolioService {
|
||||
otherMarkets: 0
|
||||
};
|
||||
|
||||
for (const country of symbolProfile.countries) {
|
||||
if (developedMarkets.includes(country.code)) {
|
||||
markets.developedMarkets = new Big(markets.developedMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (emergingMarkets.includes(country.code)) {
|
||||
markets.emergingMarkets = new Big(markets.emergingMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else {
|
||||
markets.otherMarkets = new Big(markets.otherMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
}
|
||||
if (symbolProfile.countries.length > 0) {
|
||||
for (const country of symbolProfile.countries) {
|
||||
if (developedMarkets.includes(country.code)) {
|
||||
markets.developedMarkets = new Big(markets.developedMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (emergingMarkets.includes(country.code)) {
|
||||
markets.emergingMarkets = new Big(markets.emergingMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else {
|
||||
markets.otherMarkets = new Big(markets.otherMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
}
|
||||
|
||||
if (country.code === 'JP') {
|
||||
marketsAdvanced.japan = new Big(marketsAdvanced.japan)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (country.code === 'CA' || country.code === 'US') {
|
||||
marketsAdvanced.northAmerica = new Big(marketsAdvanced.northAmerica)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (asiaPacificMarkets.includes(country.code)) {
|
||||
marketsAdvanced.asiaPacific = new Big(marketsAdvanced.asiaPacific)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (emergingMarkets.includes(country.code)) {
|
||||
marketsAdvanced.emergingMarkets = new Big(
|
||||
marketsAdvanced.emergingMarkets
|
||||
)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (europeMarkets.includes(country.code)) {
|
||||
marketsAdvanced.europe = new Big(marketsAdvanced.europe)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else {
|
||||
marketsAdvanced.otherMarkets = new Big(marketsAdvanced.otherMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
if (country.code === 'JP') {
|
||||
marketsAdvanced.japan = new Big(marketsAdvanced.japan)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (country.code === 'CA' || country.code === 'US') {
|
||||
marketsAdvanced.northAmerica = new Big(marketsAdvanced.northAmerica)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (asiaPacificMarkets.includes(country.code)) {
|
||||
marketsAdvanced.asiaPacific = new Big(marketsAdvanced.asiaPacific)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (emergingMarkets.includes(country.code)) {
|
||||
marketsAdvanced.emergingMarkets = new Big(
|
||||
marketsAdvanced.emergingMarkets
|
||||
)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else if (europeMarkets.includes(country.code)) {
|
||||
marketsAdvanced.europe = new Big(marketsAdvanced.europe)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
} else {
|
||||
marketsAdvanced.otherMarkets = new Big(marketsAdvanced.otherMarkets)
|
||||
.plus(country.weight)
|
||||
.toNumber();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
markets[UNKNOWN_KEY] = new Big(markets[UNKNOWN_KEY])
|
||||
.plus(value)
|
||||
.toNumber();
|
||||
|
||||
marketsAdvanced[UNKNOWN_KEY] = new Big(marketsAdvanced[UNKNOWN_KEY])
|
||||
.plus(value)
|
||||
.toNumber();
|
||||
}
|
||||
|
||||
holdings[item.symbol] = {
|
||||
@ -1830,12 +1842,12 @@ export class PortfolioService {
|
||||
userId: string;
|
||||
withExcludedAccounts?: boolean;
|
||||
}) {
|
||||
const ordersOfTypeItem = await this.orderService.getOrders({
|
||||
const ordersOfTypeItemOrLiability = await this.orderService.getOrders({
|
||||
filters,
|
||||
userCurrency,
|
||||
userId,
|
||||
withExcludedAccounts,
|
||||
types: ['ITEM']
|
||||
types: ['ITEM', 'LIABILITY']
|
||||
});
|
||||
|
||||
const accounts: PortfolioDetails['accounts'] = {};
|
||||
@ -1875,13 +1887,14 @@ export class PortfolioService {
|
||||
return accountId === account.id;
|
||||
});
|
||||
|
||||
const ordersOfTypeItemByAccount = ordersOfTypeItem.filter(
|
||||
({ accountId }) => {
|
||||
const ordersOfTypeItemOrLiabilityByAccount =
|
||||
ordersOfTypeItemOrLiability.filter(({ accountId }) => {
|
||||
return accountId === account.id;
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
ordersByAccount = ordersByAccount.concat(ordersOfTypeItemByAccount);
|
||||
ordersByAccount = ordersByAccount.concat(
|
||||
ordersOfTypeItemOrLiabilityByAccount
|
||||
);
|
||||
|
||||
accounts[account.id] = {
|
||||
balance: account.balance,
|
||||
@ -1921,7 +1934,7 @@ export class PortfolioService {
|
||||
order.unitPrice ??
|
||||
0);
|
||||
|
||||
if (order.type === 'SELL') {
|
||||
if (order.type === 'LIABILITY' || order.type === 'SELL') {
|
||||
currentValueOfSymbolInBaseCurrency *= -1;
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { Store } from 'cache-manager';
|
||||
import { RedisClient } from 'redis';
|
||||
import { createClient } from 'redis';
|
||||
|
||||
export interface RedisStore extends Store {
|
||||
getClient: () => RedisClient;
|
||||
getClient: () => ReturnType<typeof createClient>;
|
||||
isCacheableValue: (value: any) => boolean;
|
||||
name: 'redis';
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
||||
import { CacheManagerOptions, CacheModule, Module } from '@nestjs/common';
|
||||
import { CacheModule } from '@nestjs/cache-manager';
|
||||
import { Module } from '@nestjs/common';
|
||||
import * as redisStore from 'cache-manager-redis-store';
|
||||
import type { RedisClientOptions } from 'redis';
|
||||
|
||||
import { RedisCacheService } from './redis-cache.service';
|
||||
|
||||
@ -11,7 +13,7 @@ import { RedisCacheService } from './redis-cache.service';
|
||||
imports: [ConfigurationModule],
|
||||
inject: [ConfigurationService],
|
||||
useFactory: async (configurationService: ConfigurationService) => {
|
||||
return <CacheManagerOptions>{
|
||||
return <RedisClientOptions>{
|
||||
host: configurationService.get('REDIS_HOST'),
|
||||
max: configurationService.get('MAX_ITEM_IN_CACHE'),
|
||||
password: configurationService.get('REDIS_PASSWORD'),
|
||||
|
@ -1,6 +1,8 @@
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
||||
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
|
||||
import { UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import { CACHE_MANAGER, Inject, Injectable, Logger } from '@nestjs/common';
|
||||
import { CACHE_MANAGER } from '@nestjs/cache-manager';
|
||||
import { Inject, Injectable, Logger } from '@nestjs/common';
|
||||
|
||||
import type { RedisCache } from './interfaces/redis-cache.interface';
|
||||
|
||||
@ -22,7 +24,7 @@ export class RedisCacheService {
|
||||
}
|
||||
|
||||
public getQuoteKey({ dataSource, symbol }: UniqueAsset) {
|
||||
return `quote-${dataSource}-${symbol}`;
|
||||
return `quote-${getAssetProfileIdentifier({ dataSource, symbol })}`;
|
||||
}
|
||||
|
||||
public async remove(key: string) {
|
||||
@ -34,8 +36,10 @@ export class RedisCacheService {
|
||||
}
|
||||
|
||||
public async set(key: string, value: string, ttlInSeconds?: number) {
|
||||
await this.cache.set(key, value, {
|
||||
ttl: ttlInSeconds ?? this.configurationService.get('CACHE_TTL')
|
||||
});
|
||||
await this.cache.set(
|
||||
key,
|
||||
value,
|
||||
ttlInSeconds ?? this.configurationService.get('CACHE_TTL')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
36
apps/api/src/app/sitemap/sitemap.controller.ts
Normal file
36
apps/api/src/app/sitemap/sitemap.controller.ts
Normal file
@ -0,0 +1,36 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import {
|
||||
DATE_FORMAT,
|
||||
getYesterday,
|
||||
interpolate
|
||||
} from '@ghostfolio/common/helper';
|
||||
import { Controller, Get, Res, VERSION_NEUTRAL, Version } from '@nestjs/common';
|
||||
import { format } from 'date-fns';
|
||||
import { Response } from 'express';
|
||||
|
||||
@Controller('sitemap.xml')
|
||||
export class SitemapController {
|
||||
public sitemapXml = '';
|
||||
|
||||
public constructor() {
|
||||
try {
|
||||
this.sitemapXml = fs.readFileSync(
|
||||
path.join(__dirname, 'assets', 'sitemap.xml'),
|
||||
'utf8'
|
||||
);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
@Get()
|
||||
@Version(VERSION_NEUTRAL)
|
||||
public async flushCache(@Res() response: Response): Promise<void> {
|
||||
response.setHeader('content-type', 'application/xml');
|
||||
response.send(
|
||||
interpolate(this.sitemapXml, {
|
||||
currentDate: format(getYesterday(), DATE_FORMAT)
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
24
apps/api/src/app/sitemap/sitemap.module.ts
Normal file
24
apps/api/src/app/sitemap/sitemap.module.ts
Normal file
@ -0,0 +1,24 @@
|
||||
import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
|
||||
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
|
||||
import { DataGatheringModule } from '@ghostfolio/api/services/data-gathering/data-gathering.module';
|
||||
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
|
||||
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
|
||||
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
|
||||
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { SitemapController } from './sitemap.controller';
|
||||
|
||||
@Module({
|
||||
controllers: [SitemapController],
|
||||
imports: [
|
||||
ConfigurationModule,
|
||||
DataGatheringModule,
|
||||
DataProviderModule,
|
||||
ExchangeRateDataModule,
|
||||
PrismaModule,
|
||||
RedisCacheModule,
|
||||
SymbolProfileModule
|
||||
]
|
||||
})
|
||||
export class SitemapModule {}
|
@ -21,6 +21,7 @@ import { isDate, isEmpty } from 'lodash';
|
||||
import { LookupItem } from './interfaces/lookup-item.interface';
|
||||
import { SymbolItem } from './interfaces/symbol-item.interface';
|
||||
import { SymbolService } from './symbol.service';
|
||||
import { parseISO } from 'date-fns';
|
||||
|
||||
@Controller('symbol')
|
||||
export class SymbolController {
|
||||
@ -93,7 +94,7 @@ export class SymbolController {
|
||||
@Param('dateString') dateString: string,
|
||||
@Param('symbol') symbol: string
|
||||
): Promise<IDataProviderHistoricalResponse> {
|
||||
const date = new Date(dateString);
|
||||
const date = parseISO(dateString);
|
||||
|
||||
if (!isDate(date)) {
|
||||
throw new HttpException(
|
||||
|
@ -4,7 +4,11 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con
|
||||
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
|
||||
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
|
||||
import { PROPERTY_IS_READ_ONLY_MODE, locale } from '@ghostfolio/common/config';
|
||||
import {
|
||||
DEFAULT_CURRENCY,
|
||||
PROPERTY_IS_READ_ONLY_MODE,
|
||||
locale
|
||||
} from '@ghostfolio/common/config';
|
||||
import { User as IUser, UserSettings } from '@ghostfolio/common/interfaces';
|
||||
import {
|
||||
getPermissions,
|
||||
@ -14,14 +18,13 @@ import {
|
||||
import { UserWithSettings } from '@ghostfolio/common/types';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Prisma, Role, User } from '@prisma/client';
|
||||
import { differenceInDays } from 'date-fns';
|
||||
import { sortBy } from 'lodash';
|
||||
|
||||
const crypto = require('crypto');
|
||||
|
||||
@Injectable()
|
||||
export class UserService {
|
||||
public static DEFAULT_CURRENCY = 'USD';
|
||||
|
||||
private baseCurrency: string;
|
||||
|
||||
public constructor(
|
||||
@ -144,8 +147,7 @@ export class UserService {
|
||||
|
||||
// Set default value for base currency
|
||||
if (!(user.Settings.settings as UserSettings)?.baseCurrency) {
|
||||
(user.Settings.settings as UserSettings).baseCurrency =
|
||||
UserService.DEFAULT_CURRENCY;
|
||||
(user.Settings.settings as UserSettings).baseCurrency = DEFAULT_CURRENCY;
|
||||
}
|
||||
|
||||
// Set default value for date range
|
||||
@ -165,11 +167,29 @@ export class UserService {
|
||||
user.subscription =
|
||||
this.subscriptionService.getSubscription(Subscription);
|
||||
|
||||
if (
|
||||
Analytics?.activityCount % 5 === 0 &&
|
||||
user.subscription?.type === 'Basic'
|
||||
) {
|
||||
currentPermissions.push(permissions.enableSubscriptionInterstitial);
|
||||
if (user.subscription?.type === 'Basic') {
|
||||
const daysSinceRegistration = differenceInDays(
|
||||
new Date(),
|
||||
user.createdAt
|
||||
);
|
||||
let frequency = 20;
|
||||
|
||||
if (daysSinceRegistration > 180) {
|
||||
frequency = 3;
|
||||
} else if (daysSinceRegistration > 60) {
|
||||
frequency = 5;
|
||||
} else if (daysSinceRegistration > 30) {
|
||||
frequency = 10;
|
||||
} else if (daysSinceRegistration > 15) {
|
||||
frequency = 15;
|
||||
}
|
||||
|
||||
if (Analytics?.activityCount % frequency === 1) {
|
||||
currentPermissions.push(permissions.enableSubscriptionInterstitial);
|
||||
}
|
||||
|
||||
// Reset benchmark
|
||||
user.Settings.settings.benchmark = undefined;
|
||||
}
|
||||
|
||||
if (user.subscription?.type === 'Premium') {
|
||||
|
@ -66,6 +66,10 @@
|
||||
<loc>https://ghostfol.io/de/ueber-uns/lizenz</loc>
|
||||
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/de/ueber-uns/oss-friends</loc>
|
||||
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en</loc>
|
||||
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
|
||||
@ -82,6 +86,10 @@
|
||||
<loc>https://ghostfol.io/en/about/license</loc>
|
||||
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/about/oss-friends</loc>
|
||||
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog</loc>
|
||||
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
|
||||
|
@ -7,6 +7,7 @@ import helmet from 'helmet';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
import { HtmlTemplateMiddleware } from './middlewares/html-template.middleware';
|
||||
|
||||
async function bootstrap() {
|
||||
const configApp = await NestFactory.create(AppModule);
|
||||
@ -23,7 +24,7 @@ async function bootstrap() {
|
||||
defaultVersion: '1',
|
||||
type: VersioningType.URI
|
||||
});
|
||||
app.setGlobalPrefix('api');
|
||||
app.setGlobalPrefix('api', { exclude: ['sitemap.xml'] });
|
||||
app.useGlobalPipes(
|
||||
new ValidationPipe({
|
||||
forbidNonWhitelisted: true,
|
||||
@ -40,6 +41,7 @@ async function bootstrap() {
|
||||
helmet({
|
||||
contentSecurityPolicy: {
|
||||
directives: {
|
||||
connectSrc: ["'self'", 'https://js.stripe.com'], // Allow connections to Stripe
|
||||
frameSrc: ["'self'", 'https://js.stripe.com'], // Allow loading frames from Stripe
|
||||
scriptSrc: ["'self'", "'unsafe-inline'", 'https://js.stripe.com'], // Allow inline scripts and scripts from Stripe
|
||||
scriptSrcAttr: ["'self'", "'unsafe-inline'"], // Allow inline event handlers
|
||||
@ -51,6 +53,8 @@ async function bootstrap() {
|
||||
);
|
||||
}
|
||||
|
||||
app.use(HtmlTemplateMiddleware);
|
||||
|
||||
const BASE_CURRENCY = configService.get<string>('BASE_CURRENCY');
|
||||
const HOST = configService.get<string>('HOST') || '0.0.0.0';
|
||||
const PORT = configService.get<number>('PORT') || 3333;
|
||||
|
128
apps/api/src/middlewares/html-template.middleware.ts
Normal file
128
apps/api/src/middlewares/html-template.middleware.ts
Normal file
@ -0,0 +1,128 @@
|
||||
import * as fs from 'fs';
|
||||
import { join } from 'path';
|
||||
|
||||
import { environment } from '@ghostfolio/api/environments/environment';
|
||||
import {
|
||||
DEFAULT_LANGUAGE_CODE,
|
||||
DEFAULT_ROOT_URL,
|
||||
SUPPORTED_LANGUAGE_CODES
|
||||
} from '@ghostfolio/common/config';
|
||||
import { DATE_FORMAT, interpolate } from '@ghostfolio/common/helper';
|
||||
import { format } from 'date-fns';
|
||||
import { NextFunction, Request, Response } from 'express';
|
||||
|
||||
const descriptions = {
|
||||
de: 'Mit dem Finanz-Dashboard Ghostfolio können Sie Ihr Vermögen in Form von Aktien, ETFs oder Kryptowährungen verteilt über mehrere Finanzinstitute überwachen.',
|
||||
en: 'Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms.',
|
||||
es: 'Ghostfolio es un dashboard de finanzas personales para hacer un seguimiento de tus activos como acciones, ETFs o criptodivisas a través de múltiples plataformas.',
|
||||
fr: 'Ghostfolio est un dashboard de finances personnelles qui permet de suivre vos actifs comme les actions, les ETF ou les crypto-monnaies sur plusieurs plateformes.',
|
||||
it: 'Ghostfolio è un dashboard di finanza personale per tenere traccia delle vostre attività come azioni, ETF o criptovalute su più piattaforme.',
|
||||
nl: 'Ghostfolio is een persoonlijk financieel dashboard om uw activa zoals aandelen, ETF’s of cryptocurrencies over meerdere platforms bij te houden.',
|
||||
pt: 'Ghostfolio é um dashboard de finanças pessoais para acompanhar os seus activos como acções, ETFs ou criptomoedas em múltiplas plataformas.'
|
||||
};
|
||||
|
||||
const title = 'Ghostfolio – Open Source Wealth Management Software';
|
||||
const titleShort = 'Ghostfolio';
|
||||
|
||||
let indexHtmlMap: { [languageCode: string]: string } = {};
|
||||
|
||||
try {
|
||||
indexHtmlMap = SUPPORTED_LANGUAGE_CODES.reduce(
|
||||
(map, languageCode) => ({
|
||||
...map,
|
||||
[languageCode]: fs.readFileSync(
|
||||
join(__dirname, '..', 'client', languageCode, 'index.html'),
|
||||
'utf8'
|
||||
)
|
||||
}),
|
||||
{}
|
||||
);
|
||||
} catch {}
|
||||
|
||||
const locales = {
|
||||
'/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt': {
|
||||
featureGraphicPath: 'assets/images/blog/ghostfolio-x-sackgeld.png',
|
||||
title: `Ghostfolio auf Sackgeld.com vorgestellt - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2022/08/500-stars-on-github': {
|
||||
featureGraphicPath: 'assets/images/blog/500-stars-on-github.jpg',
|
||||
title: `500 Stars - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2022/10/hacktoberfest-2022': {
|
||||
featureGraphicPath: 'assets/images/blog/hacktoberfest-2022.png',
|
||||
title: `Hacktoberfest 2022 - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2022/12/the-importance-of-tracking-your-personal-finances': {
|
||||
featureGraphicPath: 'assets/images/blog/20221226.jpg',
|
||||
title: `The importance of tracking your personal finances - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2023/02/ghostfolio-meets-umbrel': {
|
||||
featureGraphicPath: 'assets/images/blog/ghostfolio-x-umbrel.png',
|
||||
title: `Ghostfolio meets Umbrel - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github': {
|
||||
featureGraphicPath: 'assets/images/blog/1000-stars-on-github.jpg',
|
||||
title: `Ghostfolio reaches 1’000 Stars on GitHub - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2023/05/unlock-your-financial-potential-with-ghostfolio': {
|
||||
featureGraphicPath: 'assets/images/blog/20230520.jpg',
|
||||
title: `Unlock your Financial Potential with Ghostfolio - ${titleShort}`
|
||||
},
|
||||
'/en/blog/2023/07/exploring-the-path-to-fire': {
|
||||
featureGraphicPath: 'assets/images/blog/20230701.jpg',
|
||||
title: `Exploring the Path to FIRE - ${titleShort}`
|
||||
}
|
||||
};
|
||||
|
||||
const isFileRequest = (filename: string) => {
|
||||
if (filename === '/assets/LICENSE') {
|
||||
return true;
|
||||
} else if (
|
||||
filename.includes('auth/ey') ||
|
||||
filename.includes(
|
||||
'personal-finance-tools/open-source-alternative-to-markets.sh'
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return filename.split('.').pop() !== filename;
|
||||
};
|
||||
|
||||
export const HtmlTemplateMiddleware = async (
|
||||
request: Request,
|
||||
response: Response,
|
||||
next: NextFunction
|
||||
) => {
|
||||
const path = request.originalUrl.replace(/\/$/, '');
|
||||
let languageCode = path.substr(1, 2);
|
||||
|
||||
if (!SUPPORTED_LANGUAGE_CODES.includes(languageCode)) {
|
||||
languageCode = DEFAULT_LANGUAGE_CODE;
|
||||
}
|
||||
|
||||
const currentDate = format(new Date(), DATE_FORMAT);
|
||||
const rootUrl = process.env.ROOT_URL || DEFAULT_ROOT_URL;
|
||||
|
||||
if (
|
||||
path.startsWith('/api/') ||
|
||||
isFileRequest(path) ||
|
||||
!environment.production
|
||||
) {
|
||||
// Skip
|
||||
next();
|
||||
} else {
|
||||
const indexHtml = interpolate(indexHtmlMap[languageCode], {
|
||||
currentDate,
|
||||
languageCode,
|
||||
path,
|
||||
rootUrl,
|
||||
description: descriptions[languageCode],
|
||||
featureGraphicPath:
|
||||
locales[path]?.featureGraphicPath ?? 'assets/cover.png',
|
||||
title: locales[path]?.title ?? title
|
||||
});
|
||||
|
||||
return response.send(indexHtml);
|
||||
}
|
||||
};
|
@ -1,4 +1,5 @@
|
||||
import { Environment } from '@ghostfolio/api/services/interfaces/environment.interface';
|
||||
import { DEFAULT_CURRENCY, DEFAULT_ROOT_URL } from '@ghostfolio/common/config';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { DataSource } from '@prisma/client';
|
||||
import { bool, cleanEnv, host, json, num, port, str } from 'envalid';
|
||||
@ -13,7 +14,7 @@ export class ConfigurationService {
|
||||
ALPHA_VANTAGE_API_KEY: str({ default: '' }),
|
||||
BASE_CURRENCY: str({
|
||||
choices: ['AUD', 'CAD', 'CNY', 'EUR', 'GBP', 'JPY', 'RUB', 'USD'],
|
||||
default: 'USD'
|
||||
default: DEFAULT_CURRENCY
|
||||
}),
|
||||
BETTER_UPTIME_API_KEY: str({ default: '' }),
|
||||
CACHE_QUOTES_TTL: num({ default: 1 }),
|
||||
@ -46,7 +47,7 @@ export class ConfigurationService {
|
||||
REDIS_HOST: str({ default: 'localhost' }),
|
||||
REDIS_PASSWORD: str({ default: '' }),
|
||||
REDIS_PORT: port({ default: 6379 }),
|
||||
ROOT_URL: str({ default: 'http://localhost:4200' }),
|
||||
ROOT_URL: str({ default: DEFAULT_ROOT_URL }),
|
||||
STRIPE_PUBLIC_KEY: str({ default: '' }),
|
||||
STRIPE_SECRET_KEY: str({ default: '' }),
|
||||
TWITTER_ACCESS_TOKEN: str({ default: 'dummyAccessToken' }),
|
||||
|
@ -2,6 +2,7 @@ import {
|
||||
GATHER_ASSET_PROFILE_PROCESS,
|
||||
GATHER_ASSET_PROFILE_PROCESS_OPTIONS
|
||||
} from '@ghostfolio/common/config';
|
||||
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Cron, CronExpression } from '@nestjs/schedule';
|
||||
|
||||
@ -48,7 +49,7 @@ export class CronService {
|
||||
name: GATHER_ASSET_PROFILE_PROCESS,
|
||||
opts: {
|
||||
...GATHER_ASSET_PROFILE_PROCESS_OPTIONS,
|
||||
jobId: `${dataSource}-${symbol}`
|
||||
jobId: getAssetProfileIdentifier({ dataSource, symbol })
|
||||
}
|
||||
};
|
||||
})
|
||||
|
@ -5,6 +5,7 @@ import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-
|
||||
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 { PropertyModule } from '@ghostfolio/api/services/property/property.module';
|
||||
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
|
||||
import { DATA_GATHERING_QUEUE } from '@ghostfolio/common/config';
|
||||
import { BullModule } from '@nestjs/bull';
|
||||
@ -28,6 +29,7 @@ import { DataGatheringProcessor } from './data-gathering.processor';
|
||||
ExchangeRateDataModule,
|
||||
MarketDataModule,
|
||||
PrismaModule,
|
||||
PropertyModule,
|
||||
SymbolProfileModule
|
||||
],
|
||||
providers: [DataGatheringProcessor, DataGatheringService],
|
||||
|
@ -4,14 +4,20 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-
|
||||
import { IDataGatheringItem } 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 { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
|
||||
import {
|
||||
DATA_GATHERING_QUEUE,
|
||||
GATHER_HISTORICAL_MARKET_DATA_PROCESS,
|
||||
GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS
|
||||
GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS,
|
||||
PROPERTY_BENCHMARKS
|
||||
} from '@ghostfolio/common/config';
|
||||
import { DATE_FORMAT, resetHours } from '@ghostfolio/common/helper';
|
||||
import { UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import {
|
||||
DATE_FORMAT,
|
||||
getAssetProfileIdentifier,
|
||||
resetHours
|
||||
} from '@ghostfolio/common/helper';
|
||||
import { BenchmarkProperty, UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import { InjectQueue } from '@nestjs/bull';
|
||||
import { Inject, Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource } from '@prisma/client';
|
||||
@ -30,6 +36,7 @@ export class DataGatheringService {
|
||||
private readonly exchangeRateDataService: ExchangeRateDataService,
|
||||
private readonly marketDataService: MarketDataService,
|
||||
private readonly prismaService: PrismaService,
|
||||
private readonly propertyService: PropertyService,
|
||||
private readonly symbolProfileService: SymbolProfileService
|
||||
) {}
|
||||
|
||||
@ -221,7 +228,10 @@ export class DataGatheringService {
|
||||
name: GATHER_HISTORICAL_MARKET_DATA_PROCESS,
|
||||
opts: {
|
||||
...GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS,
|
||||
jobId: `${dataSource}-${symbol}-${format(date, DATE_FORMAT)}`
|
||||
jobId: `${getAssetProfileIdentifier({
|
||||
dataSource,
|
||||
symbol
|
||||
})}-${format(date, DATE_FORMAT)}`
|
||||
}
|
||||
};
|
||||
})
|
||||
@ -248,6 +258,10 @@ export class DataGatheringService {
|
||||
});
|
||||
}
|
||||
|
||||
private getEarliestDate(aStartDate: Date) {
|
||||
return min([aStartDate, subYears(new Date(), 10)]);
|
||||
}
|
||||
|
||||
private async getSymbols7D(): Promise<IDataGatheringItem[]> {
|
||||
const startDate = subDays(resetHours(new Date()), 7);
|
||||
|
||||
@ -314,6 +328,14 @@ export class DataGatheringService {
|
||||
}
|
||||
|
||||
private async getSymbolsMax(): Promise<IDataGatheringItem[]> {
|
||||
const benchmarkAssetProfileIdMap: { [key: string]: boolean } = {};
|
||||
(
|
||||
((await this.propertyService.getByKey(
|
||||
PROPERTY_BENCHMARKS
|
||||
)) as BenchmarkProperty[]) ?? []
|
||||
).forEach(({ symbolProfileId }) => {
|
||||
benchmarkAssetProfileIdMap[symbolProfileId] = true;
|
||||
});
|
||||
const startDate =
|
||||
(
|
||||
await this.prismaService.order.findFirst({
|
||||
@ -327,7 +349,7 @@ export class DataGatheringService {
|
||||
return {
|
||||
dataSource,
|
||||
symbol,
|
||||
date: min([startDate, subYears(new Date(), 10)])
|
||||
date: this.getEarliestDate(startDate)
|
||||
};
|
||||
});
|
||||
|
||||
@ -336,6 +358,7 @@ export class DataGatheringService {
|
||||
orderBy: [{ symbol: 'asc' }],
|
||||
select: {
|
||||
dataSource: true,
|
||||
id: true,
|
||||
Order: {
|
||||
orderBy: [{ date: 'asc' }],
|
||||
select: { date: true },
|
||||
@ -357,9 +380,15 @@ export class DataGatheringService {
|
||||
);
|
||||
})
|
||||
.map((symbolProfile) => {
|
||||
let date = symbolProfile.Order?.[0]?.date ?? startDate;
|
||||
|
||||
if (benchmarkAssetProfileIdMap[symbolProfile.id]) {
|
||||
date = this.getEarliestDate(startDate);
|
||||
}
|
||||
|
||||
return {
|
||||
...symbolProfile,
|
||||
date: symbolProfile.Order?.[0]?.date ?? startDate
|
||||
date
|
||||
};
|
||||
});
|
||||
|
||||
|
@ -15,8 +15,8 @@ import {
|
||||
DataSource,
|
||||
SymbolProfile
|
||||
} from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import { format, fromUnixTime, getUnixTime } from 'date-fns';
|
||||
import got from 'got';
|
||||
|
||||
@Injectable()
|
||||
export class CoinGeckoService implements DataProviderInterface {
|
||||
@ -45,8 +45,7 @@ export class CoinGeckoService implements DataProviderInterface {
|
||||
};
|
||||
|
||||
try {
|
||||
const get = bent(`${this.URL}/coins/${aSymbol}`, 'GET', 'json', 200);
|
||||
const { name } = await get();
|
||||
const { name } = await got(`${this.URL}/coins/${aSymbol}`).json<any>();
|
||||
|
||||
response.name = name;
|
||||
} catch (error) {
|
||||
@ -79,17 +78,13 @@ export class CoinGeckoService implements DataProviderInterface {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
}> {
|
||||
try {
|
||||
const get = bent(
|
||||
const { prices } = await got(
|
||||
`${
|
||||
this.URL
|
||||
}/coins/${aSymbol}/market_chart/range?vs_currency=${this.baseCurrency.toLowerCase()}&from=${getUnixTime(
|
||||
from
|
||||
)}&to=${getUnixTime(to)}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const { prices } = await get();
|
||||
)}&to=${getUnixTime(to)}`
|
||||
).json<any>();
|
||||
|
||||
const result: {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
@ -132,15 +127,11 @@ export class CoinGeckoService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
const response = await got(
|
||||
`${this.URL}/simple/price?ids=${aSymbols.join(
|
||||
','
|
||||
)}&vs_currencies=${this.baseCurrency.toLowerCase()}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const response = await get();
|
||||
)}&vs_currencies=${this.baseCurrency.toLowerCase()}`
|
||||
).json<any>();
|
||||
|
||||
for (const symbol in response) {
|
||||
if (Object.prototype.hasOwnProperty.call(response, symbol)) {
|
||||
@ -174,8 +165,9 @@ export class CoinGeckoService implements DataProviderInterface {
|
||||
let items: LookupItem[] = [];
|
||||
|
||||
try {
|
||||
const get = bent(`${this.URL}/search?query=${query}`, 'GET', 'json', 200);
|
||||
const { coins } = await get();
|
||||
const { coins } = await got(
|
||||
`${this.URL}/search?query=${query}`
|
||||
).json<any>();
|
||||
|
||||
items = coins.map(({ id: symbol, name }) => {
|
||||
return {
|
||||
|
@ -3,9 +3,7 @@ import { Country } from '@ghostfolio/common/interfaces/country.interface';
|
||||
import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { SymbolProfile } from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
|
||||
const getJSON = bent('json');
|
||||
import got from 'got';
|
||||
|
||||
@Injectable()
|
||||
export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
@ -34,11 +32,13 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
return response;
|
||||
}
|
||||
|
||||
const profile = await getJSON(
|
||||
const profile = await got(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/data-api/funds/${symbol}.json`
|
||||
).catch(() => {
|
||||
return {};
|
||||
});
|
||||
)
|
||||
.json<any>()
|
||||
.catch(() => {
|
||||
return {};
|
||||
});
|
||||
|
||||
const isin = profile.isin?.split(';')?.[0];
|
||||
|
||||
@ -46,15 +46,17 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
response.isin = isin;
|
||||
}
|
||||
|
||||
const holdings = await getJSON(
|
||||
const holdings = await got(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol}.json`
|
||||
).catch(() => {
|
||||
return getJSON(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/holdings/${
|
||||
symbol.split('.')?.[0]
|
||||
}.json`
|
||||
);
|
||||
});
|
||||
)
|
||||
.json<any>()
|
||||
.catch(() => {
|
||||
return got(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/holdings/${
|
||||
symbol.split('.')?.[0]
|
||||
}.json`
|
||||
);
|
||||
});
|
||||
|
||||
if (holdings?.weight < 0.95) {
|
||||
// Skip if data is inaccurate
|
||||
|
@ -5,6 +5,7 @@ import {
|
||||
IDataProviderHistoricalResponse,
|
||||
IDataProviderResponse
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { DEFAULT_REQUEST_TIMEOUT } from '@ghostfolio/common/config';
|
||||
import { DATE_FORMAT, isCurrency } from '@ghostfolio/common/helper';
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
@ -14,9 +15,10 @@ import {
|
||||
DataSource,
|
||||
SymbolProfile
|
||||
} from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import Big from 'big.js';
|
||||
import { format, isToday } from 'date-fns';
|
||||
import got from 'got';
|
||||
import ms from 'ms';
|
||||
|
||||
@Injectable()
|
||||
export class EodHistoricalDataService implements DataProviderInterface {
|
||||
@ -76,19 +78,19 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
const symbol = this.convertToEodSymbol(aSymbol);
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
const response = await got(
|
||||
`${this.URL}/eod/${symbol}?api_token=${
|
||||
this.apiKey
|
||||
}&fmt=json&from=${format(from, DATE_FORMAT)}&to=${format(
|
||||
to,
|
||||
DATE_FORMAT
|
||||
)}&period={aGranularity}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
|
||||
const response = await get();
|
||||
{
|
||||
timeout: {
|
||||
request: DEFAULT_REQUEST_TIMEOUT
|
||||
}
|
||||
}
|
||||
).json<any>();
|
||||
|
||||
return response.reduce(
|
||||
(result, historicalItem, index, array) => {
|
||||
@ -136,16 +138,16 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
const realTimeResponse = await got(
|
||||
`${this.URL}/real-time/${symbols[0]}?api_token=${
|
||||
this.apiKey
|
||||
}&fmt=json&s=${symbols.join(',')}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
|
||||
const realTimeResponse = await get();
|
||||
{
|
||||
timeout: {
|
||||
request: DEFAULT_REQUEST_TIMEOUT
|
||||
}
|
||||
}
|
||||
).json<any>();
|
||||
|
||||
const quotes =
|
||||
symbols.length === 1 ? [realTimeResponse] : realTimeResponse;
|
||||
@ -329,13 +331,14 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
let searchResult = [];
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
const response = await got(
|
||||
`${this.URL}/search/${aQuery}?api_token=${this.apiKey}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const response = await get();
|
||||
{
|
||||
timeout: {
|
||||
request: DEFAULT_REQUEST_TIMEOUT
|
||||
}
|
||||
}
|
||||
).json<any>();
|
||||
|
||||
searchResult = response.map(
|
||||
({ Code, Currency, Exchange, ISIN: isin, Name: name, Type }) => {
|
||||
|
@ -10,8 +10,8 @@ import { DataProviderInfo } from '@ghostfolio/common/interfaces';
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource, SymbolProfile } from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import { format, isAfter, isBefore, isSameDay } from 'date-fns';
|
||||
import got from 'got';
|
||||
|
||||
@Injectable()
|
||||
export class FinancialModelingPrepService implements DataProviderInterface {
|
||||
@ -64,13 +64,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
}> {
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/historical-price-full/${aSymbol}?apikey=${this.apiKey}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const { historical } = await get();
|
||||
const { historical } = await got(
|
||||
`${this.URL}/historical-price-full/${aSymbol}?apikey=${this.apiKey}`
|
||||
).json<any>();
|
||||
|
||||
const result: {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
@ -115,13 +111,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/quote/${aSymbols.join(',')}?apikey=${this.apiKey}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const response = await get();
|
||||
const response = await got(
|
||||
`${this.URL}/quote/${aSymbols.join(',')}?apikey=${this.apiKey}`
|
||||
).json<any>();
|
||||
|
||||
for (const { price, symbol } of response) {
|
||||
results[symbol] = {
|
||||
@ -153,13 +145,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
|
||||
let items: LookupItem[] = [];
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/search?query=${query}&apikey=${this.apiKey}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const result = await get();
|
||||
const result = await got(
|
||||
`${this.URL}/search?query=${query}&apikey=${this.apiKey}`
|
||||
).json<any>();
|
||||
|
||||
items = result.map(({ currency, name, symbol }) => {
|
||||
return {
|
||||
|
@ -14,10 +14,10 @@ import {
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource, SymbolProfile } from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { isUUID } from 'class-validator';
|
||||
import { addDays, format, isBefore } from 'date-fns';
|
||||
import got from 'got';
|
||||
|
||||
@Injectable()
|
||||
export class ManualService implements DataProviderInterface {
|
||||
@ -95,10 +95,9 @@ export class ManualService implements DataProviderInterface {
|
||||
return {};
|
||||
}
|
||||
|
||||
const get = bent(url, 'GET', 'string', 200, headers);
|
||||
const { body } = await got(url, { headers });
|
||||
|
||||
const html = await get();
|
||||
const $ = cheerio.load(html);
|
||||
const $ = cheerio.load(body);
|
||||
|
||||
const value = extractNumberFromString($(selector).text());
|
||||
|
||||
|
@ -10,8 +10,8 @@ import { DATE_FORMAT, getYesterday } from '@ghostfolio/common/helper';
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource, SymbolProfile } from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import { format } from 'date-fns';
|
||||
import got from 'got';
|
||||
|
||||
@Injectable()
|
||||
export class RapidApiService implements DataProviderInterface {
|
||||
@ -135,19 +135,17 @@ export class RapidApiService implements DataProviderInterface {
|
||||
oneYearAgo: { value: number; valueText: string };
|
||||
}> {
|
||||
try {
|
||||
const get = bent(
|
||||
const { fgi } = await got(
|
||||
`https://fear-and-greed-index.p.rapidapi.com/v1/fgi`,
|
||||
'GET',
|
||||
'json',
|
||||
200,
|
||||
{
|
||||
useQueryString: true,
|
||||
'x-rapidapi-host': 'fear-and-greed-index.p.rapidapi.com',
|
||||
'x-rapidapi-key': this.configurationService.get('RAPID_API_API_KEY')
|
||||
headers: {
|
||||
useQueryString: 'true',
|
||||
'x-rapidapi-host': 'fear-and-greed-index.p.rapidapi.com',
|
||||
'x-rapidapi-key': this.configurationService.get('RAPID_API_API_KEY')
|
||||
}
|
||||
}
|
||||
);
|
||||
).json<any>();
|
||||
|
||||
const { fgi } = await get();
|
||||
return fgi;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'RapidApiService');
|
||||
|
@ -33,6 +33,15 @@ export class ExchangeRateDataService {
|
||||
return this.currencyPairs;
|
||||
}
|
||||
|
||||
public hasCurrencyPair(currency1: string, currency2: string) {
|
||||
return this.currencyPairs.some(({ symbol }) => {
|
||||
return (
|
||||
symbol === `${currency1}${currency2}` ||
|
||||
symbol === `${currency2}${currency1}`
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public async initialize() {
|
||||
this.baseCurrency = this.configurationService.get('BASE_CURRENCY');
|
||||
this.currencies = await this.prepareCurrencies();
|
||||
|
@ -4,7 +4,7 @@
|
||||
"outDir": "../../dist/out-tsc",
|
||||
"types": ["node"],
|
||||
"emitDecoratorMetadata": true,
|
||||
"target": "es2015"
|
||||
"target": "es2021"
|
||||
},
|
||||
"exclude": ["**/*.spec.ts", "**/*.test.ts", "jest.config.ts"],
|
||||
"include": ["**/*.ts"]
|
||||
|
@ -11,65 +11,15 @@
|
||||
"prefix": "gf",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@angular-devkit/build-angular:browser",
|
||||
"executor": "@nx/angular:webpack-browser",
|
||||
"options": {
|
||||
"localize": true,
|
||||
"outputPath": "dist/apps/client",
|
||||
"index": "apps/client/src/index.html",
|
||||
"main": "apps/client/src/main.ts",
|
||||
"polyfills": "apps/client/src/polyfills.ts",
|
||||
"tsConfig": "apps/client/tsconfig.app.json",
|
||||
"assets": [
|
||||
{
|
||||
"glob": "assetlinks.json",
|
||||
"input": "apps/client/src/assets",
|
||||
"output": "./../.well-known"
|
||||
},
|
||||
{
|
||||
"glob": "CHANGELOG.md",
|
||||
"input": "",
|
||||
"output": "./../assets"
|
||||
},
|
||||
{
|
||||
"glob": "favicon.ico",
|
||||
"input": "apps/client/src/assets",
|
||||
"output": "./../"
|
||||
},
|
||||
{
|
||||
"glob": "LICENSE",
|
||||
"input": "",
|
||||
"output": "./../assets"
|
||||
},
|
||||
{
|
||||
"glob": "robots.txt",
|
||||
"input": "apps/client/src/assets",
|
||||
"output": "./../"
|
||||
},
|
||||
{
|
||||
"glob": "sitemap.xml",
|
||||
"input": "apps/client/src/assets",
|
||||
"output": "./../"
|
||||
},
|
||||
{
|
||||
"glob": "site.webmanifest",
|
||||
"input": "apps/client/src/assets",
|
||||
"output": "./../"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "node_modules/ionicons/dist/ionicons",
|
||||
"output": "./../ionicons"
|
||||
},
|
||||
{
|
||||
"glob": "**/*.js",
|
||||
"input": "node_modules/ionicons/dist/",
|
||||
"output": "./../"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "apps/client/src/assets",
|
||||
"output": "./../assets/"
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"styles": [
|
||||
"apps/client/src/styles/theme.scss",
|
||||
"apps/client/src/styles.scss"
|
||||
@ -144,8 +94,51 @@
|
||||
"outputs": ["{options.outputPath}"],
|
||||
"defaultConfiguration": ""
|
||||
},
|
||||
"copy-assets": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "mkdir -p dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp -r apps/client/src/assets dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp -r apps/client/src/assets/.well-known dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp apps/client/src/assets/favicon.ico dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp apps/client/src/assets/index.html dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp apps/client/src/assets/robots.txt dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp apps/client/src/assets/site.webmanifest dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp node_modules/ionicons/dist/index.js dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp node_modules/ionicons/dist/ionicons.js dist/apps/client"
|
||||
},
|
||||
{
|
||||
"command": "cp -r node_modules/ionicons/dist/ionicons dist/apps/client/ionicons"
|
||||
},
|
||||
{
|
||||
"command": "cp CHANGELOG.md dist/apps/client/assets"
|
||||
},
|
||||
{
|
||||
"command": "cp LICENSE dist/apps/client/assets"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"serve": {
|
||||
"executor": "@angular-devkit/build-angular:dev-server",
|
||||
"executor": "@nx/angular:webpack-dev-server",
|
||||
"options": {
|
||||
"browserTarget": "client:build",
|
||||
"proxyConfig": "apps/client/proxy.conf.json"
|
||||
|
@ -21,8 +21,8 @@ const routes: Routes = [
|
||||
{
|
||||
path: 'account',
|
||||
loadChildren: () =>
|
||||
import('./pages/account/account-page.module').then(
|
||||
(m) => m.AccountPageModule
|
||||
import('./pages/user-account/user-account-page.module').then(
|
||||
(m) => m.UserAccountPageModule
|
||||
)
|
||||
},
|
||||
{
|
||||
|
@ -50,6 +50,7 @@
|
||||
currentRoute === 'features' ||
|
||||
currentRoute === 'markets' ||
|
||||
currentRoute === 'open' ||
|
||||
currentRoute === 'p' ||
|
||||
currentRoute === 'pricing' ||
|
||||
currentRoute === 'resources' ||
|
||||
currentRoute === 'register' ||
|
||||
|
@ -154,7 +154,7 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit {
|
||||
day: string;
|
||||
yearMonth: string;
|
||||
}) {
|
||||
const date = new Date(`${yearMonth}-${day}`);
|
||||
const date = parseISO(`${yearMonth}-${day}`);
|
||||
const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice;
|
||||
|
||||
if (isSameDay(date, new Date())) {
|
||||
|
@ -60,6 +60,11 @@ export class AdminMarketDataComponent
|
||||
};
|
||||
})
|
||||
.concat([
|
||||
{
|
||||
id: 'CURRENCIES',
|
||||
label: $localize`Currencies`,
|
||||
type: <Filter['type']>'PRESET_ID'
|
||||
},
|
||||
{
|
||||
id: 'ETF_WITHOUT_COUNTRIES',
|
||||
label: $localize`ETFs without Countries`,
|
||||
|
@ -169,6 +169,8 @@
|
||||
<mat-option value="7 days">7 Days</mat-option>
|
||||
<mat-option value="14 days">14 Days</mat-option>
|
||||
<mat-option value="30 days">30 Days</mat-option>
|
||||
<mat-option value="90 days">90 Days</mat-option>
|
||||
<mat-option value="180 days">180 Days</mat-option>
|
||||
<mat-option value="1 year">1 Year</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
@ -1,57 +1,110 @@
|
||||
<div
|
||||
class="align-items-center container d-flex flex-column h-100 justify-content-center overview p-0 position-relative"
|
||||
>
|
||||
<div class="row w-100">
|
||||
<div class="col p-0">
|
||||
<div class="chart-container mx-auto position-relative">
|
||||
<div
|
||||
*ngIf="hasPermissionToCreateOrder && historicalDataItems?.length === 0"
|
||||
class="align-items-center d-flex h-100 justify-content-center w-100"
|
||||
<div
|
||||
*ngIf="hasPermissionToCreateOrder && historicalDataItems?.length === 0; else isUserActive"
|
||||
class="justify-content-center row w-100"
|
||||
>
|
||||
<div class="col introduction">
|
||||
<h4 i18n>Welcome to Ghostfolio</h4>
|
||||
<p i18n>Ready to take control of your personal finances?</p>
|
||||
<ol class="font-weight-bold">
|
||||
<li
|
||||
class="mb-2"
|
||||
[ngClass]="{ 'text-muted': user?.accounts?.length > 1 }"
|
||||
>
|
||||
<div class="d-flex justify-content-center">
|
||||
<gf-no-transactions-info-indicator></gf-no-transactions-info-indicator>
|
||||
</div>
|
||||
<a class="d-block" [routerLink]="['/accounts']"
|
||||
><span i18n>Setup your accounts</span><br />
|
||||
<span class="font-weight-normal" i18n
|
||||
>Get a comprehensive financial overview by adding your bank and
|
||||
brokerage accounts.</span
|
||||
></a
|
||||
>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a class="d-block" [routerLink]="['/portfolio', 'activities']">
|
||||
<span i18n>Capture your activities</span><br />
|
||||
<span class="font-weight-normal" i18n
|
||||
>Record your investment activities to keep your portfolio up to
|
||||
date.</span
|
||||
></a
|
||||
>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a class="d-block" [routerLink]="['/portfolio']">
|
||||
<span i18n>Monitor and analyze your portfolio</span><br />
|
||||
<span class="font-weight-normal" i18n
|
||||
>Track your progress in real-time with comprehensive analysis and
|
||||
insights.</span
|
||||
>
|
||||
</a>
|
||||
</li>
|
||||
</ol>
|
||||
<div class="d-flex justify-content-center">
|
||||
<a
|
||||
*ngIf="user?.accounts?.length === 1"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[routerLink]="['/accounts']"
|
||||
>
|
||||
<ng-container i18n>Setup accounts</ng-container>
|
||||
</a>
|
||||
<a
|
||||
*ngIf="user?.accounts?.length > 1"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[routerLink]="['/portfolio', 'activities']"
|
||||
>
|
||||
<ng-container i18n>Add activity</ng-container>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ng-template #isUserActive>
|
||||
<div class="row w-100">
|
||||
<div class="col p-0">
|
||||
<div class="chart-container mx-auto position-relative">
|
||||
<gf-line-chart
|
||||
class="position-absolute"
|
||||
symbol="Performance"
|
||||
unit="%"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[hidden]="historicalDataItems?.length === 0"
|
||||
[historicalDataItems]="historicalDataItems"
|
||||
[isAnimated]="user?.settings?.dateRange === '1d' ? false : true"
|
||||
[locale]="user?.settings?.locale"
|
||||
[ngClass]="{ 'pr-3': deviceType === 'mobile' }"
|
||||
[showGradient]="true"
|
||||
[showLoader]="false"
|
||||
[showXAxis]="false"
|
||||
[showYAxis]="false"
|
||||
></gf-line-chart>
|
||||
</div>
|
||||
<gf-line-chart
|
||||
class="position-absolute"
|
||||
symbol="Performance"
|
||||
unit="%"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[hidden]="historicalDataItems?.length === 0"
|
||||
[historicalDataItems]="historicalDataItems"
|
||||
[isAnimated]="user?.settings?.dateRange === '1d' ? false : true"
|
||||
[locale]="user?.settings?.locale"
|
||||
[ngClass]="{ 'pr-3': deviceType === 'mobile' }"
|
||||
[showGradient]="true"
|
||||
[showLoader]="false"
|
||||
[showXAxis]="false"
|
||||
[showYAxis]="false"
|
||||
></gf-line-chart>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="overview-container row mt-1">
|
||||
<div class="col">
|
||||
<gf-portfolio-performance
|
||||
class="pb-4"
|
||||
[baseCurrency]="user?.settings?.baseCurrency"
|
||||
[deviceType]="deviceType"
|
||||
[errors]="errors"
|
||||
[isAllTimeHigh]="isAllTimeHigh"
|
||||
[isAllTimeLow]="isAllTimeLow"
|
||||
[isLoading]="isLoadingPerformance"
|
||||
[locale]="user?.settings?.locale"
|
||||
[performance]="performance"
|
||||
[showDetails]="showDetails"
|
||||
></gf-portfolio-performance>
|
||||
<div *ngIf="showDetails" class="text-center">
|
||||
<gf-toggle
|
||||
[defaultValue]="user?.settings?.dateRange"
|
||||
<div class="overview-container row mt-1">
|
||||
<div class="col">
|
||||
<gf-portfolio-performance
|
||||
class="pb-4"
|
||||
[baseCurrency]="user?.settings?.baseCurrency"
|
||||
[deviceType]="deviceType"
|
||||
[errors]="errors"
|
||||
[isAllTimeHigh]="isAllTimeHigh"
|
||||
[isAllTimeLow]="isAllTimeLow"
|
||||
[isLoading]="isLoadingPerformance"
|
||||
[options]="dateRangeOptions"
|
||||
(change)="onChangeDateRange($event.value)"
|
||||
></gf-toggle>
|
||||
[locale]="user?.settings?.locale"
|
||||
[performance]="performance"
|
||||
[showDetails]="showDetails"
|
||||
></gf-portfolio-performance>
|
||||
<div *ngIf="showDetails" class="text-center">
|
||||
<gf-toggle
|
||||
[defaultValue]="user?.settings?.dateRange"
|
||||
[isLoading]="isLoadingPerformance"
|
||||
[options]="dateRangeOptions"
|
||||
(change)="onChangeDateRange($event.value)"
|
||||
></gf-toggle>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</div>
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { GfPortfolioPerformanceModule } from '@ghostfolio/client/components/portfolio-performance/portfolio-performance.module';
|
||||
import { GfToggleModule } from '@ghostfolio/client/components/toggle/toggle.module';
|
||||
@ -16,6 +17,7 @@ import { HomeOverviewComponent } from './home-overview.component';
|
||||
GfNoTransactionsInfoModule,
|
||||
GfPortfolioPerformanceModule,
|
||||
GfToggleModule,
|
||||
MatButtonModule,
|
||||
RouterModule
|
||||
],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||
|
@ -31,4 +31,8 @@
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.introduction {
|
||||
max-width: 50rem;
|
||||
}
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ export class HomeSummaryComponent implements OnDestroy, OnInit {
|
||||
this.isLoading = true;
|
||||
|
||||
this.dataService
|
||||
.fetchPortfolioDetails({})
|
||||
.fetchPortfolioDetails()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(({ summary }) => {
|
||||
this.summary = summary;
|
||||
|
@ -50,7 +50,7 @@ export class PortfolioSummaryComponent implements OnChanges, OnInit {
|
||||
public onEditEmergencyFund() {
|
||||
const emergencyFundInput = prompt(
|
||||
$localize`Please enter the amount of your emergency fund:`,
|
||||
this.summary.emergencyFund?.toString() ?? '0'
|
||||
this.summary.emergencyFund?.total?.toString() ?? '0'
|
||||
);
|
||||
const emergencyFund = parseFloat(emergencyFundInput?.trim());
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import {
|
||||
ActivatedRouteSnapshot,
|
||||
CanActivate,
|
||||
Router,
|
||||
RouterStateSnapshot
|
||||
} from '@angular/router';
|
||||
@ -12,7 +11,7 @@ import { EMPTY } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class AuthGuard implements CanActivate {
|
||||
export class AuthGuard {
|
||||
private static PUBLIC_PAGE_ROUTES = [
|
||||
'/about',
|
||||
'/about/changelog',
|
||||
|
@ -38,6 +38,13 @@ const routes: Routes = [
|
||||
(m) => m.LicensePageModule
|
||||
)
|
||||
})),
|
||||
{
|
||||
path: 'oss-friends',
|
||||
loadChildren: () =>
|
||||
import('./oss-friends/oss-friends-page.module').then(
|
||||
(m) => m.OpenSourceSoftwareFriendsPageModule
|
||||
)
|
||||
},
|
||||
...[
|
||||
'privacy-policy',
|
||||
/////
|
||||
|
@ -44,30 +44,31 @@ export class AboutPageComponent implements OnDestroy, OnInit {
|
||||
this.userService.stateChanged
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((state) => {
|
||||
this.tabs = [
|
||||
{
|
||||
iconName: 'reader-outline',
|
||||
label: $localize`About`,
|
||||
path: ['/about']
|
||||
},
|
||||
{
|
||||
iconName: 'sparkles-outline',
|
||||
label: $localize`Changelog`,
|
||||
path: ['/about', 'changelog']
|
||||
},
|
||||
{
|
||||
iconName: 'ribbon-outline',
|
||||
label: $localize`License`,
|
||||
path: ['/about', 'license']
|
||||
}
|
||||
];
|
||||
|
||||
if (state?.user) {
|
||||
this.tabs = [
|
||||
{
|
||||
iconName: 'reader-outline',
|
||||
label: $localize`About`,
|
||||
path: ['/about']
|
||||
},
|
||||
{
|
||||
iconName: 'sparkles-outline',
|
||||
label: $localize`Changelog`,
|
||||
path: ['/about', 'changelog']
|
||||
},
|
||||
{
|
||||
iconName: 'ribbon-outline',
|
||||
label: $localize`License`,
|
||||
path: ['/about', 'license']
|
||||
},
|
||||
{
|
||||
iconName: 'shield-checkmark-outline',
|
||||
label: $localize`Privacy Policy`,
|
||||
path: ['/about', 'privacy-policy'],
|
||||
showCondition: this.hasPermissionForSubscription
|
||||
}
|
||||
];
|
||||
this.tabs.push({
|
||||
iconName: 'shield-checkmark-outline',
|
||||
label: $localize`Privacy Policy`,
|
||||
path: ['/about', 'privacy-policy'],
|
||||
showCondition: this.hasPermissionForSubscription
|
||||
});
|
||||
this.user = state.user;
|
||||
|
||||
this.hasMessage =
|
||||
@ -78,6 +79,12 @@ export class AboutPageComponent implements OnDestroy, OnInit {
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
}
|
||||
|
||||
this.tabs.push({
|
||||
iconName: 'happy-outline',
|
||||
label: 'OSS Friends',
|
||||
path: ['/about', 'oss-friends']
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -11,14 +11,9 @@
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
|
||||
::ng-deep {
|
||||
gf-about-page,
|
||||
gf-changelog-page,
|
||||
gf-privacy-policy-page {
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-link-container {
|
||||
--mat-tab-header-active-focus-indicator-color: transparent;
|
||||
--mat-tab-header-active-hover-indicator-color: transparent;
|
||||
--mdc-tab-indicator-active-indicator-color: transparent;
|
||||
|
||||
.mat-mdc-tab-link {
|
||||
|
@ -0,0 +1,20 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
|
||||
|
||||
import { OpenSourceSoftwareFriendsPageComponent } from './oss-friends-page.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
canActivate: [AuthGuard],
|
||||
component: OpenSourceSoftwareFriendsPageComponent,
|
||||
path: '',
|
||||
title: 'OSS Friends'
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
exports: [RouterModule],
|
||||
imports: [RouterModule.forChild(routes)]
|
||||
})
|
||||
export class OpenSourceSoftwareFriendsPageRoutingModule {}
|
@ -0,0 +1,145 @@
|
||||
import { Component, OnDestroy } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
@Component({
|
||||
host: { class: 'page' },
|
||||
selector: 'gf-oss-friends-page',
|
||||
styleUrls: ['./oss-friends-page.scss'],
|
||||
templateUrl: './oss-friends-page.html'
|
||||
})
|
||||
export class OpenSourceSoftwareFriendsPageComponent implements OnDestroy {
|
||||
public ossFriends = [
|
||||
{
|
||||
description: 'Build build custom software on top of your data.',
|
||||
name: 'Appsmith',
|
||||
url: 'https://www.appsmith.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster.',
|
||||
name: 'BoxyHQ',
|
||||
url: 'https://boxyhq.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.',
|
||||
name: 'Cal.com',
|
||||
url: 'https://cal.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Centralize community, product, and customer data to understand which companies are engaging with your open source project.',
|
||||
name: 'Crowd.dev',
|
||||
url: 'https://www.crowd.dev'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'The Open-Source DocuSign Alternative. We aim to earn your trust by enabling you to self-host the platform and examine its inner workings.',
|
||||
name: 'Documenso',
|
||||
url: 'https://documenso.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'The Open-Source HubSpot Alternative. A single XOS enables to create unique and life-changing experiences that work for all types of business.',
|
||||
name: 'Erxes',
|
||||
url: 'https://erxes.io'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.',
|
||||
name: 'Formbricks',
|
||||
url: 'https://formbricks.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'GitWonk is an open-source technical documentation tool, designed and built focusing on the developer experience.',
|
||||
name: 'GitWonk',
|
||||
url: 'https://gitwonk.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.',
|
||||
name: 'Hanko',
|
||||
url: 'https://www.hanko.io'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'HTMX is a dependency-free JavaScript library that allows you to access AJAX, CSS Transitions, WebSockets, and Server Sent Events directly in HTML.',
|
||||
name: 'HTMX',
|
||||
url: 'https://htmx.org'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.',
|
||||
name: 'Infisical',
|
||||
url: 'https://infisical.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Mockoon is the easiest and quickest way to design and run mock REST APIs.',
|
||||
name: 'Mockoon',
|
||||
url: 'https://mockoon.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'The open-source notification infrastructure for developers. Simple components and APIs for managing all communication channels in one place.',
|
||||
name: 'Novu',
|
||||
url: 'https://novu.co'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.',
|
||||
name: 'OpenBB',
|
||||
url: 'https://openbb.co'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Sniffnet is a network monitoring tool to help you easily keep track of your Internet traffic.',
|
||||
name: 'Sniffnet',
|
||||
url: 'https://www.sniffnet.net'
|
||||
},
|
||||
{
|
||||
description: 'Software localization from A to Z made really easy.',
|
||||
name: 'Tolgee',
|
||||
url: 'https://tolgee.io'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Create long-running Jobs directly in your codebase with features like API integrations, webhooks, scheduling and delays.',
|
||||
name: 'Trigger.dev',
|
||||
url: 'https://trigger.dev'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.',
|
||||
name: 'Typebot',
|
||||
url: 'https://typebot.io'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'A modern CRM offering the flexibility of open-source, advanced features and sleek design.',
|
||||
name: 'Twenty',
|
||||
url: 'https://twenty.com'
|
||||
},
|
||||
{
|
||||
description:
|
||||
'Open-source enterprise-grade serverless CMS. Own your data. Scale effortlessly. Customize everything.',
|
||||
name: 'Webiny',
|
||||
url: 'https://www.webiny.com'
|
||||
},
|
||||
{
|
||||
description: 'Webstudio is an open source alternative to Webflow',
|
||||
name: 'Webstudio',
|
||||
url: 'https://webstudio.is'
|
||||
}
|
||||
];
|
||||
|
||||
private unsubscribeSubject = new Subject<void>();
|
||||
|
||||
public constructor() {}
|
||||
|
||||
public ngOnDestroy() {
|
||||
this.unsubscribeSubject.next();
|
||||
this.unsubscribeSubject.complete();
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
<div class="container">
|
||||
<div class="mb-5 row">
|
||||
<div class="col">
|
||||
<h3 class="d-none d-sm-block mb-3 text-center">
|
||||
<ng-container i18n>Our</ng-container> OSS Friends
|
||||
</h3>
|
||||
<div class="row">
|
||||
<div
|
||||
*ngFor="let ossFriend of ossFriends"
|
||||
class="col-xs-12 col-md-4 mb-3"
|
||||
>
|
||||
<mat-card appearance="outlined" class="d-flex flex-column h-100">
|
||||
<mat-card-header>
|
||||
<mat-card-title class="h4"
|
||||
><a target="_blank" [href]="ossFriend.url"
|
||||
>{{ ossFriend.name }}</a
|
||||
></mat-card-title
|
||||
>
|
||||
</mat-card-header>
|
||||
<mat-card-content class="flex-grow-1">
|
||||
<p>{{ ossFriend.description }}</p>
|
||||
</mat-card-content>
|
||||
<mat-card-actions class="justify-content-end">
|
||||
<a mat-button target="_blank" [href]="ossFriend.url">
|
||||
<span
|
||||
><ng-container i18n>Visit</ng-container> {{ ossFriend.name
|
||||
}}</span
|
||||
><ion-icon class="ml-1" name="arrow-forward-outline"></ion-icon>
|
||||
</a>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,19 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
|
||||
import { OpenSourceSoftwareFriendsPageRoutingModule } from './oss-friends-page-routing.module';
|
||||
import { OpenSourceSoftwareFriendsPageComponent } from './oss-friends-page.component';
|
||||
import { MatCardModule } from '@angular/material/card';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
|
||||
@NgModule({
|
||||
declarations: [OpenSourceSoftwareFriendsPageComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
MatButtonModule,
|
||||
MatCardModule,
|
||||
OpenSourceSoftwareFriendsPageRoutingModule
|
||||
],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||
})
|
||||
export class OpenSourceSoftwareFriendsPageModule {}
|
@ -0,0 +1,3 @@
|
||||
:host {
|
||||
display: block;
|
||||
}
|
@ -11,16 +11,9 @@
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
|
||||
::ng-deep {
|
||||
gf-admin-jobs,
|
||||
gf-admin-market-data,
|
||||
gf-admin-overview,
|
||||
gf-admin-settings,
|
||||
gf-admin-users {
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-link-container {
|
||||
--mat-tab-header-active-focus-indicator-color: transparent;
|
||||
--mat-tab-header-active-hover-indicator-color: transparent;
|
||||
--mdc-tab-indicator-active-indicator-color: transparent;
|
||||
|
||||
.mat-mdc-tab-link {
|
||||
|
@ -11,15 +11,9 @@
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
|
||||
::ng-deep {
|
||||
gf-home-holdings,
|
||||
gf-home-market,
|
||||
gf-home-overview,
|
||||
gf-home-summary {
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-link-container {
|
||||
--mat-tab-header-active-focus-indicator-color: transparent;
|
||||
--mat-tab-header-active-hover-indicator-color: transparent;
|
||||
--mdc-tab-indicator-active-indicator-color: transparent;
|
||||
|
||||
.mat-mdc-tab-link {
|
||||
|
@ -3,7 +3,7 @@
|
||||
<div class="col">
|
||||
<h3 class="d-none d-sm-block mb-3 text-center">Open Startup</h3>
|
||||
<div class="intro-container">
|
||||
<p>
|
||||
<p i18n>
|
||||
At Ghostfolio, transparency is at the core of our values. We publish
|
||||
the source code as
|
||||
<a
|
||||
@ -18,7 +18,7 @@
|
||||
>AGPL-3.0 license</a
|
||||
>
|
||||
and we openly share aggregated key metrics of the platform’s
|
||||
performance.
|
||||
operational status.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@ -31,6 +31,7 @@
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
subLabel="(Last 24 hours)"
|
||||
[locale]="user?.settings?.locale"
|
||||
@ -40,6 +41,7 @@
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
subLabel="(Last 30 days)"
|
||||
[locale]="user?.settings?.locale"
|
||||
@ -49,6 +51,7 @@
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
subLabel="(Last 30 days)"
|
||||
[locale]="user?.settings?.locale"
|
||||
@ -62,6 +65,7 @@
|
||||
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
|
||||
>
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="statistics?.slackCommunityUsers ?? '-'"
|
||||
@ -75,6 +79,7 @@
|
||||
href="https://github.com/ghostfolio/ghostfolio/graphs/contributors"
|
||||
>
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="statistics?.gitHubContributors ?? '-'"
|
||||
@ -88,6 +93,7 @@
|
||||
href="https://github.com/ghostfolio/ghostfolio/stargazers"
|
||||
>
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="statistics?.gitHubStargazers ?? '-'"
|
||||
@ -101,6 +107,7 @@
|
||||
href="https://hub.docker.com/r/ghostfolio/ghostfolio"
|
||||
>
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="statistics?.dockerHubPulls ?? '-'"
|
||||
@ -111,6 +118,7 @@
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<a class="d-block" href="https://status.ghostfol.io">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
subLabel="(Last 90 days)"
|
||||
[isPercent]="true"
|
||||
|
@ -72,7 +72,13 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
public positions: {
|
||||
[symbol: string]: Pick<
|
||||
PortfolioPosition,
|
||||
'assetClass' | 'assetSubClass' | 'currency' | 'exchange' | 'name'
|
||||
| 'assetClass'
|
||||
| 'assetClassLabel'
|
||||
| 'assetSubClass'
|
||||
| 'assetSubClassLabel'
|
||||
| 'currency'
|
||||
| 'exchange'
|
||||
| 'name'
|
||||
> & { etfProvider: string; value: number };
|
||||
};
|
||||
public sectors: {
|
||||
@ -86,7 +92,7 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
value: number;
|
||||
};
|
||||
};
|
||||
|
||||
public UNKNOWN_KEY = UNKNOWN_KEY;
|
||||
public user: User;
|
||||
public worldMapChartFormat: string;
|
||||
|
||||
@ -229,20 +235,29 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
}
|
||||
};
|
||||
this.markets = {
|
||||
[UNKNOWN_KEY]: {
|
||||
name: UNKNOWN_KEY,
|
||||
value: 0
|
||||
},
|
||||
developedMarkets: {
|
||||
name: 'developedMarkets',
|
||||
value: undefined
|
||||
value: 0
|
||||
},
|
||||
emergingMarkets: {
|
||||
name: 'emergingMarkets',
|
||||
value: undefined
|
||||
value: 0
|
||||
},
|
||||
otherMarkets: {
|
||||
name: 'otherMarkets',
|
||||
value: undefined
|
||||
value: 0
|
||||
}
|
||||
};
|
||||
this.marketsAdvanced = {
|
||||
[UNKNOWN_KEY]: {
|
||||
id: UNKNOWN_KEY,
|
||||
name: UNKNOWN_KEY,
|
||||
value: 0
|
||||
},
|
||||
asiaPacific: {
|
||||
id: 'asiaPacific',
|
||||
name: translate('Asia-Pacific'),
|
||||
@ -332,7 +347,9 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
this.positions[symbol] = {
|
||||
value,
|
||||
assetClass: position.assetClass,
|
||||
assetClassLabel: translate(position.assetClass),
|
||||
assetSubClass: position.assetSubClass,
|
||||
assetSubClassLabel: translate(position.assetSubClass),
|
||||
currency: position.currency,
|
||||
etfProvider: this.extractEtfProvider({
|
||||
assetSubClass: position.assetSubClass,
|
||||
@ -346,16 +363,6 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
// Prepare analysis data by continents, countries and sectors except for cash
|
||||
|
||||
if (position.countries.length > 0) {
|
||||
if (!this.markets.developedMarkets.value) {
|
||||
this.markets.developedMarkets.value = 0;
|
||||
}
|
||||
if (!this.markets.emergingMarkets.value) {
|
||||
this.markets.emergingMarkets.value = 0;
|
||||
}
|
||||
if (!this.markets.otherMarkets.value) {
|
||||
this.markets.otherMarkets.value = 0;
|
||||
}
|
||||
|
||||
this.markets.developedMarkets.value +=
|
||||
position.markets.developedMarkets *
|
||||
(isNumber(position.valueInBaseCurrency)
|
||||
@ -447,6 +454,18 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
)
|
||||
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency
|
||||
: this.portfolioDetails.holdings[symbol].valueInPercentage;
|
||||
|
||||
this.markets[UNKNOWN_KEY].value += isNumber(
|
||||
position.valueInBaseCurrency
|
||||
)
|
||||
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency
|
||||
: this.portfolioDetails.holdings[symbol].valueInPercentage;
|
||||
|
||||
this.marketsAdvanced[UNKNOWN_KEY].value += isNumber(
|
||||
position.valueInBaseCurrency
|
||||
)
|
||||
? this.portfolioDetails.holdings[symbol].valueInBaseCurrency
|
||||
: this.portfolioDetails.holdings[symbol].valueInPercentage;
|
||||
}
|
||||
|
||||
if (position.sectors.length > 0) {
|
||||
@ -511,7 +530,8 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
const marketsTotal =
|
||||
this.markets.developedMarkets.value +
|
||||
this.markets.emergingMarkets.value +
|
||||
this.markets.otherMarkets.value;
|
||||
this.markets.otherMarkets.value +
|
||||
this.markets[UNKNOWN_KEY].value;
|
||||
|
||||
this.markets.developedMarkets.value =
|
||||
this.markets.developedMarkets.value / marketsTotal;
|
||||
@ -519,6 +539,8 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
this.markets.emergingMarkets.value / marketsTotal;
|
||||
this.markets.otherMarkets.value =
|
||||
this.markets.otherMarkets.value / marketsTotal;
|
||||
this.markets[UNKNOWN_KEY].value =
|
||||
this.markets[UNKNOWN_KEY].value / marketsTotal;
|
||||
}
|
||||
|
||||
public onAccountChartClicked({ symbol }: UniqueAsset) {
|
||||
|
@ -93,7 +93,7 @@
|
||||
[baseCurrency]="user?.settings?.baseCurrency"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
||||
[keys]="['assetClass', 'assetSubClass']"
|
||||
[keys]="['assetClassLabel', 'assetSubClassLabel']"
|
||||
[locale]="user?.settings?.locale"
|
||||
[positions]="positions"
|
||||
></gf-portfolio-proportion-chart>
|
||||
@ -215,7 +215,7 @@
|
||||
></gf-world-map-chart>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<div class="col-xs-12 col-md my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
@ -224,7 +224,7 @@
|
||||
>Developed Markets</gf-value
|
||||
>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<div class="col-xs-12 col-md my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
@ -233,7 +233,7 @@
|
||||
>Emerging Markets</gf-value
|
||||
>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<div class="col-xs-12 col-md my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
@ -242,6 +242,18 @@
|
||||
>Other Markets</gf-value
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
*ngIf="markets?.[UNKNOWN_KEY]?.value > 0"
|
||||
class="col-xs-12 col-md my-2"
|
||||
>
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[isPercent]="true"
|
||||
[value]="markets?.[UNKNOWN_KEY]?.value"
|
||||
>No data available</gf-value
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
@ -31,6 +31,7 @@
|
||||
}
|
||||
|
||||
.mat-mdc-progress-bar {
|
||||
--mdc-linear-progress-active-indicator-height: 0.5rem;
|
||||
--mdc-linear-progress-track-height: 0.5rem;
|
||||
border-radius: 0.25rem;
|
||||
|
||||
|
@ -44,7 +44,7 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
this.deviceType = this.deviceService.getDeviceInfo().deviceType;
|
||||
|
||||
this.dataService
|
||||
.fetchPortfolioDetails({})
|
||||
.fetchPortfolioDetails()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(({ summary }) => {
|
||||
if (summary.cash === null || summary.currentValue === null) {
|
||||
|
@ -164,7 +164,11 @@ export class HoldingsPageComponent implements OnDestroy, OnInit {
|
||||
for (const [symbol, position] of Object.entries(
|
||||
this.portfolioDetails.holdings
|
||||
)) {
|
||||
this.positionsArray.push(position);
|
||||
this.positionsArray.push({
|
||||
...position,
|
||||
assetClassLabel: translate(position.assetClass),
|
||||
assetSubClassLabel: translate(position.assetSubClass)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,16 +11,9 @@
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
|
||||
::ng-deep {
|
||||
gf-activities-page,
|
||||
gf-allocations-page,
|
||||
gf-analysis-page,
|
||||
gf-holdings-page,
|
||||
gf-fire-page {
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-link-container {
|
||||
--mat-tab-header-active-focus-indicator-color: transparent;
|
||||
--mat-tab-header-active-hover-indicator-color: transparent;
|
||||
--mdc-tab-indicator-active-indicator-color: transparent;
|
||||
|
||||
.mat-mdc-tab-link {
|
||||
|
@ -44,6 +44,7 @@ export class PublicPageComponent implements OnInit {
|
||||
public symbols: {
|
||||
[name: string]: { name: string; symbol: string; value: number };
|
||||
};
|
||||
public UNKNOWN_KEY = UNKNOWN_KEY;
|
||||
|
||||
private id: string;
|
||||
private unsubscribeSubject = new Subject<void>();
|
||||
@ -99,6 +100,10 @@ export class PublicPageComponent implements OnInit {
|
||||
}
|
||||
};
|
||||
this.markets = {
|
||||
[UNKNOWN_KEY]: {
|
||||
name: UNKNOWN_KEY,
|
||||
value: 0
|
||||
},
|
||||
developedMarkets: {
|
||||
name: 'developedMarkets',
|
||||
value: 0
|
||||
@ -180,6 +185,9 @@ export class PublicPageComponent implements OnInit {
|
||||
|
||||
this.countries[UNKNOWN_KEY].value +=
|
||||
this.portfolioPublicDetails.holdings[symbol].valueInBaseCurrency;
|
||||
|
||||
this.markets[UNKNOWN_KEY].value +=
|
||||
this.portfolioPublicDetails.holdings[symbol].valueInBaseCurrency;
|
||||
}
|
||||
|
||||
if (position.sectors.length > 0) {
|
||||
@ -214,7 +222,8 @@ export class PublicPageComponent implements OnInit {
|
||||
const marketsTotal =
|
||||
this.markets.developedMarkets.value +
|
||||
this.markets.emergingMarkets.value +
|
||||
this.markets.otherMarkets.value;
|
||||
this.markets.otherMarkets.value +
|
||||
this.markets[UNKNOWN_KEY].value;
|
||||
|
||||
this.markets.developedMarkets.value =
|
||||
this.markets.developedMarkets.value / marketsTotal;
|
||||
@ -222,6 +231,8 @@ export class PublicPageComponent implements OnInit {
|
||||
this.markets.emergingMarkets.value / marketsTotal;
|
||||
this.markets.otherMarkets.value =
|
||||
this.markets.otherMarkets.value / marketsTotal;
|
||||
this.markets[UNKNOWN_KEY].value =
|
||||
this.markets[UNKNOWN_KEY].value / marketsTotal;
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
|
@ -84,7 +84,7 @@
|
||||
></gf-world-map-chart>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<div class="col-xs-12 col-md my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
@ -93,7 +93,7 @@
|
||||
>Developed Markets</gf-value
|
||||
>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<div class="col-xs-12 col-md my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
@ -102,7 +102,7 @@
|
||||
>Emerging Markets</gf-value
|
||||
>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-4 my-2">
|
||||
<div class="col-xs-12 col-md my-2">
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
@ -111,6 +111,18 @@
|
||||
>Other Markets</gf-value
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
*ngIf="markets?.[UNKNOWN_KEY]?.value > 0"
|
||||
class="col-xs-12 col-md my-2"
|
||||
>
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[isPercent]="true"
|
||||
[value]="markets?.[UNKNOWN_KEY]?.value"
|
||||
>No data available</gf-value
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
@ -2,12 +2,12 @@ import { NgModule } from '@angular/core';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
|
||||
|
||||
import { AccountPageComponent } from './account-page.component';
|
||||
import { UserAccountPageComponent } from './user-account-page.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
canActivate: [AuthGuard],
|
||||
component: AccountPageComponent,
|
||||
component: UserAccountPageComponent,
|
||||
path: '',
|
||||
title: $localize`My Ghostfolio`
|
||||
}
|
||||
@ -17,4 +17,4 @@ const routes: Routes = [
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class AccountPageRoutingModule {}
|
||||
export class UserAccountPageRoutingModule {}
|
@ -15,11 +15,16 @@ import {
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { CreateAccessDto } from '@ghostfolio/api/app/access/create-access.dto';
|
||||
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||
import {
|
||||
STAY_SIGNED_IN,
|
||||
SettingsStorageService
|
||||
} from '@ghostfolio/client/services/settings-storage.service';
|
||||
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
||||
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
|
||||
import { getDateFormatString } from '@ghostfolio/common/helper';
|
||||
import { downloadAsFile, getDateFormatString } from '@ghostfolio/common/helper';
|
||||
import { Access, User } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import { format, parseISO } from 'date-fns';
|
||||
import { uniq } from 'lodash';
|
||||
import { DeviceDetectorService } from 'ngx-device-detector';
|
||||
import { StripeService } from 'ngx-stripe';
|
||||
@ -30,11 +35,11 @@ import { CreateOrUpdateAccessDialog } from './create-or-update-access-dialog/cre
|
||||
|
||||
@Component({
|
||||
host: { class: 'page' },
|
||||
selector: 'gf-account-page',
|
||||
styleUrls: ['./account-page.scss'],
|
||||
templateUrl: './account-page.html'
|
||||
selector: 'gf-user-account-page',
|
||||
styleUrls: ['./user-account-page.scss'],
|
||||
templateUrl: './user-account-page.html'
|
||||
})
|
||||
export class AccountPageComponent implements OnDestroy, OnInit {
|
||||
export class UserAccountPageComponent implements OnDestroy, OnInit {
|
||||
@ViewChild('toggleSignInWithFingerprintEnabledElement')
|
||||
signInWithFingerprintElement: MatCheckbox;
|
||||
|
||||
@ -80,6 +85,7 @@ export class AccountPageComponent implements OnDestroy, OnInit {
|
||||
private snackBar: MatSnackBar,
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private settingsStorageService: SettingsStorageService,
|
||||
private stripeService: StripeService,
|
||||
private userService: UserService,
|
||||
public webAuthnService: WebAuthnService
|
||||
@ -232,6 +238,26 @@ export class AccountPageComponent implements OnDestroy, OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
public onExport() {
|
||||
this.dataService
|
||||
.fetchExport()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((data) => {
|
||||
for (const activity of data.activities) {
|
||||
delete activity.id;
|
||||
}
|
||||
|
||||
downloadAsFile({
|
||||
content: data,
|
||||
fileName: `ghostfolio-export-${format(
|
||||
parseISO(data.meta.date),
|
||||
'yyyyMMddHHmm'
|
||||
)}.json`,
|
||||
format: 'json'
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public onRedeemCoupon() {
|
||||
let couponCode = prompt($localize`Please enter your coupon code:`);
|
||||
couponCode = couponCode?.trim();
|
||||
@ -397,6 +423,8 @@ export class AccountPageComponent implements OnDestroy, OnInit {
|
||||
})
|
||||
)
|
||||
.subscribe(() => {
|
||||
this.settingsStorageService.removeSetting(STAY_SIGNED_IN);
|
||||
|
||||
this.update();
|
||||
});
|
||||
}
|
@ -235,7 +235,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="align-items-center d-flex mt-4 py-1">
|
||||
<div class="pr-1 w-50" i18n>Sign in with fingerprint</div>
|
||||
<div class="pr-1 w-50">
|
||||
<div i18n>Biometric Authentication</div>
|
||||
<div class="hint-text text-muted" i18n>
|
||||
Sign in with fingerprint
|
||||
</div>
|
||||
</div>
|
||||
<div class="pl-1 w-50">
|
||||
<mat-checkbox
|
||||
#toggleSignInWithFingerprintEnabledElement
|
||||
@ -268,6 +273,14 @@
|
||||
<div class="pr-1 w-50" i18n>User ID</div>
|
||||
<div class="pl-1 text-monospace w-50">{{ user?.id }}</div>
|
||||
</div>
|
||||
<div class="align-items-center d-flex py-1">
|
||||
<div class="pr-1 w-50"></div>
|
||||
<div class="pl-1 text-monospace w-50">
|
||||
<button color="primary" mat-flat-button (click)="onExport()">
|
||||
<span i18n>Export Data</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
@ -12,14 +12,13 @@ import { GfPortfolioAccessTableModule } from '@ghostfolio/client/components/acce
|
||||
import { GfPremiumIndicatorModule } from '@ghostfolio/ui/premium-indicator';
|
||||
import { GfValueModule } from '@ghostfolio/ui/value';
|
||||
|
||||
import { AccountPageRoutingModule } from './account-page-routing.module';
|
||||
import { AccountPageComponent } from './account-page.component';
|
||||
import { GfCreateOrUpdateAccessDialogModule } from './create-or-update-access-dialog/create-or-update-access-dialog.module';
|
||||
import { UserAccountPageRoutingModule } from './user-account-page-routing.module';
|
||||
import { UserAccountPageComponent } from './user-account-page.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [AccountPageComponent],
|
||||
declarations: [UserAccountPageComponent],
|
||||
imports: [
|
||||
AccountPageRoutingModule,
|
||||
CommonModule,
|
||||
FormsModule,
|
||||
GfCreateOrUpdateAccessDialogModule,
|
||||
@ -33,7 +32,8 @@ import { GfCreateOrUpdateAccessDialogModule } from './create-or-update-access-di
|
||||
MatFormFieldModule,
|
||||
MatSelectModule,
|
||||
ReactiveFormsModule,
|
||||
RouterModule
|
||||
RouterModule,
|
||||
UserAccountPageRoutingModule
|
||||
]
|
||||
})
|
||||
export class AccountPageModule {}
|
||||
export class UserAccountPageModule {}
|
@ -11,13 +11,9 @@
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
|
||||
::ng-deep {
|
||||
gf-home-holdings,
|
||||
gf-home-overview {
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-link-container {
|
||||
--mat-tab-header-active-focus-indicator-color: transparent;
|
||||
--mat-tab-header-active-hover-indicator-color: transparent;
|
||||
--mdc-tab-indicator-active-indicator-color: transparent;
|
||||
|
||||
.mat-mdc-tab-link {
|
||||
|
@ -341,7 +341,7 @@ export class DataService {
|
||||
filters
|
||||
}: {
|
||||
filters?: Filter[];
|
||||
}): Observable<PortfolioDetails> {
|
||||
} = {}): Observable<PortfolioDetails> {
|
||||
return this.http
|
||||
.get<any>('/api/v1/portfolio/details', {
|
||||
params: this.buildFiltersAsQueryParams({ filters })
|
||||
@ -356,14 +356,6 @@ export class DataService {
|
||||
|
||||
if (response.holdings) {
|
||||
for (const symbol of Object.keys(response.holdings)) {
|
||||
response.holdings[symbol].assetClass = translate(
|
||||
response.holdings[symbol].assetClass
|
||||
);
|
||||
|
||||
response.holdings[symbol].assetSubClass = translate(
|
||||
response.holdings[symbol].assetSubClass
|
||||
);
|
||||
|
||||
response.holdings[symbol].dateOfFirstActivity = response.holdings[
|
||||
symbol
|
||||
].dateOfFirstActivity
|
||||
|
0
apps/client/src/assets/index.html
Normal file
0
apps/client/src/assets/index.html
Normal file
@ -18,7 +18,7 @@
|
||||
<target state="translated">Das Ausfallrisiko beim Börsenhandel kann erheblich sein. Es ist nicht ratsam, Geld zu investieren, welches du kurzfristig benötigst.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6192ee60a5e0e40874f4d02fbaaa584a0f1541e" datatype="html">
|
||||
@ -40,10 +40,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -52,6 +48,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -190,7 +190,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -404,10 +404,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -420,6 +416,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -440,10 +440,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -452,6 +448,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
<source>First Activity</source>
|
||||
@ -466,7 +466,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
|
||||
@ -622,7 +622,7 @@
|
||||
<target state="translated">Hinzufügen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
@ -630,7 +630,7 @@
|
||||
<target state="translated">Verwaltung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
@ -638,7 +638,7 @@
|
||||
<target state="translated">Cache leeren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -758,7 +758,7 @@
|
||||
<target state="translated">Ressourcen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -778,7 +778,7 @@
|
||||
<target state="translated">Preise</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -898,7 +898,7 @@
|
||||
<target state="translated">Über</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -938,7 +938,7 @@
|
||||
<target state="translated">Features</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -954,7 +954,7 @@
|
||||
<target state="translated">Märkte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -978,7 +978,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1322,7 +1322,7 @@
|
||||
<target state="translated">Allokation</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1338,7 +1338,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
@ -1346,7 +1346,7 @@
|
||||
<target state="translated">Alle anzeigen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -1430,11 +1430,11 @@
|
||||
<target state="translated">Über Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1446,7 +1446,7 @@
|
||||
<target state="translated">Datenschutzbestimmungen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1458,7 +1458,7 @@
|
||||
<target state="translated">Blog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -1526,7 +1526,7 @@
|
||||
<target state="translated">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1538,7 +1538,7 @@
|
||||
<target state="translated">Lizenz</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1550,7 +1550,7 @@
|
||||
<target state="translated">Datenschutzbestimmungen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1561,7 +1561,7 @@
|
||||
<source>My Ghostfolio</source>
|
||||
<target state="translated">Mein Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1569,53 +1569,53 @@
|
||||
<source>Please enter your coupon code:</source>
|
||||
<target state="translated">Bitte gebe deinen Gutscheincode ein:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<target state="translated">Gutscheincode konnte nicht eingelöst werden</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<target state="translated">Gutscheincode wurde eingelöst</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<target state="translated">Neu laden</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<target state="translated">Möchtest du diese Anmeldemethode wirklich löschen?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<target state="translated">Konto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1625,7 +1625,7 @@
|
||||
<source>Membership</source>
|
||||
<target state="translated">Mitgliedschaft</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1633,7 +1633,7 @@
|
||||
<source>Upgrade</source>
|
||||
<target state="translated">Upgrade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1641,7 +1641,7 @@
|
||||
<source>per year</source>
|
||||
<target state="translated">pro Jahr</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1649,7 +1649,7 @@
|
||||
<source>Try Premium</source>
|
||||
<target state="translated">Premium ausprobieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1657,7 +1657,7 @@
|
||||
<source>Redeem Coupon</source>
|
||||
<target state="translated">Gutschein einlösen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1665,7 +1665,7 @@
|
||||
<source>Presenter View</source>
|
||||
<target state="translated">Präsentationsansicht</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1673,7 +1673,7 @@
|
||||
<source>Base Currency</source>
|
||||
<target state="translated">Basiswährung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1681,7 +1681,7 @@
|
||||
<source>Locale</source>
|
||||
<target state="translated">Lokalität</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1689,51 +1689,51 @@
|
||||
<source>Date and number format</source>
|
||||
<target state="translated">Datums- und Zahlenformat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<target state="translated">Zen Modus</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<target state="translated">Einloggen mit Fingerabdruck</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<target state="translated"> Einloggen mit Fingerabdruck </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<target state="translated">Benutzer ID</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<target state="translated">Zugangsberechtigung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<target state="translated">Zugang gewähren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1741,7 +1741,7 @@
|
||||
<source>Public</source>
|
||||
<target state="translated">Öffentlich</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1954,7 +1954,7 @@
|
||||
<target state="translated">Nach Konto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -2002,7 +2002,7 @@
|
||||
<target state="translated">Nach Land</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -2140,6 +2140,10 @@
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<target state="translate">Aktivität hinzufügen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2318,7 +2322,7 @@
|
||||
<target state="translated">Ghostfolio verschafft Ihnen den Überblick über Ihr Vermögen.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -2509,7 +2513,7 @@
|
||||
<source>Language</source>
|
||||
<target state="translated">Sprache</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2671,7 +2675,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="7233cd3a1ef8913fa5c6db7a29c88044646ceacc" datatype="html">
|
||||
<source>Other Markets</source>
|
||||
<target state="translated">Andere Länder</target>
|
||||
<target state="translated">Übrige Länder</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">242</context>
|
||||
@ -2774,7 +2778,7 @@
|
||||
<target state="translated">Filtern nach...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2078421919111943467" datatype="html">
|
||||
@ -2782,7 +2786,7 @@
|
||||
<target state="translated">Filtern nach Konto oder Tag...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2798,7 +2802,7 @@
|
||||
<target state="translated">Filtern nach Konto, Währung, Symbol oder Typ...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fbaaeb297e70b9a800acf841b9d26c19d60651ef" datatype="html">
|
||||
@ -2809,7 +2813,7 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2825,8 +2829,8 @@
|
||||
<source>Experimental Features</source>
|
||||
<target state="translated">Experimentelle Funktionen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="44fcf77e86dc038202ebad6b46d1d833d60d781b" datatype="html">
|
||||
@ -2873,15 +2877,15 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Automatisch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
|
||||
<source>Appearance</source>
|
||||
<target state="translated">Aussehen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2889,7 +2893,7 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Automatisch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2897,7 +2901,7 @@
|
||||
<source>Light</source>
|
||||
<target state="translated">Hell</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2905,7 +2909,7 @@
|
||||
<source>Dark</source>
|
||||
<target state="translated">Dunkel</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3174,32 +3178,32 @@
|
||||
<target state="translated">Community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
|
||||
<source>Activities Count</source>
|
||||
@ -3373,7 +3377,7 @@
|
||||
<source>Valid until</source>
|
||||
<target state="translated">Gültig bis</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3429,7 +3433,7 @@
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<target state="translated"> Ausblenden von sensiblen Informationen wie absoluter Performance und Stückzahl </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3437,7 +3441,7 @@
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<target state="translated"> Unbeschwertes Erlebnis für turbulente Zeiten </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3445,8 +3449,8 @@
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<target state="translated"> Vorschau auf kommende Funktionalität </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3821,7 +3825,7 @@
|
||||
<source>Renew</source>
|
||||
<target state="translated">Erneuern</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3870,7 +3874,7 @@
|
||||
<target state="translated">Nach ETF-Anbieter</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e0c92dc95e1e0fc33d21b5e2df5ea28a86439d56" datatype="html">
|
||||
@ -4070,7 +4074,7 @@
|
||||
<target state="translated">Private Finanzen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
@ -4078,7 +4082,7 @@
|
||||
<target state="translated">Häufig gestellte Fragen (FAQ)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -4154,7 +4158,7 @@
|
||||
<target state="translated">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -4166,7 +4170,7 @@
|
||||
<target state="translated">Lizenz</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -7034,7 +7038,7 @@
|
||||
<target state="translated">ETFs ohne Länder</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
@ -7042,7 +7046,7 @@
|
||||
<target state="translated">ETFs ohne Sektoren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ee8f8008bae6ce3a49840c4e1d39b4af23d4c263" datatype="html">
|
||||
@ -7085,6 +7089,198 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<target state="translated">Herzlich willkommen bei Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<target state="translated">Konten einrichten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<target state="translated">Verschaffe dir einen umfassenden Überblick, indem du deine Bank- und Wertpapierkonten hinzufügst.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<target state="translated">Aktivitäten erfassen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<target state="translated">Erfasse deine Investitionsaktivitäten, um dein Portfolio auf dem neuesten Stand zu halten.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<target state="translated">Portfolio überwachen und analysieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<target state="translated">Verfolge die Entwicklung in Echtzeit mit umfassenden Analysen und Einblicken.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<target state="translated">Keine Daten verfügbar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<target state="translated">Bist du bereit, die Kontrolle über deine Finanzen zu übernehmen?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<target state="translated">Konten einrichten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<target state="translated">Biometrische Authentifizierung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<target state="translated"> Bei Ghostfolio gehört Transparenz zum zentralen Inhalt unserer Grundwerte. Wir publizieren den Quellcode als <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>Open-Source-Software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) unter der <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0-Lizenz<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> und veröffentlichen aggregierte Kennzahlen über den Betriebsstatus der Plattform. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<target state="translated">Aktive Nutzer</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<target state="translated">Neue Nutzer</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<target state="translated">Nutzer in der Slack Community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<target state="translated">Contributors auf GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<target state="translated">Sterne auf GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<target state="translated">Downloads auf Docker Hub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<target state="translated">Verfügbarkeit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<target state="translated">Daten exportieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<target state="translated">Währungen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<target state="translated">Unsere</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<target state="translated">Besuche</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<target state="new">El riesgo de pérdida en trading puede ser importante. No es aconsejable invertir dinero que puedas necesitar a corto plazo.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6192ee60a5e0e40874f4d02fbaaa584a0f1541e" datatype="html">
|
||||
@ -41,10 +41,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -53,6 +49,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -191,7 +191,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -405,10 +405,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -421,6 +417,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -441,10 +441,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -453,6 +449,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
<source>First Activity</source>
|
||||
@ -467,7 +467,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
|
||||
@ -623,7 +623,7 @@
|
||||
<target state="translated">Añadir</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
@ -631,7 +631,7 @@
|
||||
<target state="translated">Tareas domésticas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
@ -639,7 +639,7 @@
|
||||
<target state="translated">Limpiar caché</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -759,7 +759,7 @@
|
||||
<target state="translated">Recursos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -779,7 +779,7 @@
|
||||
<target state="translated">Precios</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -899,7 +899,7 @@
|
||||
<target state="translated">Sobre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -939,7 +939,7 @@
|
||||
<target state="translated">Funcionalidades</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -955,7 +955,7 @@
|
||||
<target state="translated">Mercados</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -979,7 +979,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1323,7 +1323,7 @@
|
||||
<target state="translated">Distribución</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1339,7 +1339,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
@ -1347,7 +1347,7 @@
|
||||
<target state="translated">Mostrar todos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -1431,11 +1431,11 @@
|
||||
<target state="translated">Sobre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1447,7 +1447,7 @@
|
||||
<target state="translated">Política de privacidad</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1459,7 +1459,7 @@
|
||||
<target state="translated">Blog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -1527,7 +1527,7 @@
|
||||
<target state="translated">Registro de cambios</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1539,7 +1539,7 @@
|
||||
<target state="translated">Licencia de uso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1551,7 +1551,7 @@
|
||||
<target state="translated">Política de privacidad</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1562,7 +1562,7 @@
|
||||
<source>My Ghostfolio</source>
|
||||
<target state="translated">Mi Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1570,53 +1570,53 @@
|
||||
<source>Please enter your coupon code:</source>
|
||||
<target state="translated">Por favor, ingresa tu código de cupón:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<target state="translated">No se puede canjear este código de cupón</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<target state="translated">El codigo de cupón ha sido canjeado</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<target state="translated">Refrescar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<target state="translated">¿Estás seguro de eliminar este método de acceso?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<target state="translated">Cuenta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1626,7 +1626,7 @@
|
||||
<source>Membership</source>
|
||||
<target state="translated">Suscripción</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1634,7 +1634,7 @@
|
||||
<source>Upgrade</source>
|
||||
<target state="translated">Mejorar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1642,7 +1642,7 @@
|
||||
<source>per year</source>
|
||||
<target state="translated">por año</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1650,7 +1650,7 @@
|
||||
<source>Try Premium</source>
|
||||
<target state="translated">Prueba Premium</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1658,7 +1658,7 @@
|
||||
<source>Redeem Coupon</source>
|
||||
<target state="translated">Canjea el cupón</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1666,7 +1666,7 @@
|
||||
<source>Presenter View</source>
|
||||
<target state="translated">Vista del presentador</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1674,7 +1674,7 @@
|
||||
<source>Base Currency</source>
|
||||
<target state="translated">Divisa base</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1682,7 +1682,7 @@
|
||||
<source>Locale</source>
|
||||
<target state="translated">Ubicación</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1690,51 +1690,51 @@
|
||||
<source>Date and number format</source>
|
||||
<target state="translated">Formato de fecha y número</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<target state="translated">Modo Zen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<target state="translated">Accede con huella digital</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<target state="translated"> Accede con huella digital </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<target state="translated">ID usuario</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<target state="translated">Acceso concedido</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<target state="translated">Conceder acceso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1742,7 +1742,7 @@
|
||||
<source>Public</source>
|
||||
<target state="translated">Público</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1955,7 +1955,7 @@
|
||||
<target state="translated">Por cuenta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -2003,7 +2003,7 @@
|
||||
<target state="translated">Por país</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -2141,6 +2141,10 @@
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<target state="translated">Añadir operación</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2319,7 +2323,7 @@
|
||||
<target state="translated">Ghostfolio te permite hacer un seguimiento de tu riqueza.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -2510,7 +2514,7 @@
|
||||
<source>Language</source>
|
||||
<target state="translated">Idioma</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2775,7 +2779,7 @@
|
||||
<target state="translated">Filtrar por cuenta o etiqueta...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2791,7 +2795,7 @@
|
||||
<target state="translated">Filtrar por...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="303469635941752458" datatype="html">
|
||||
@ -2799,7 +2803,7 @@
|
||||
<target state="translated">Filtrar por cuenta, divisa, símbolo o tipo...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2818,7 +2822,7 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2826,8 +2830,8 @@
|
||||
<source>Experimental Features</source>
|
||||
<target state="translated">Funcionalidades experimentales</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1931353503905413384" datatype="html">
|
||||
@ -2874,15 +2878,15 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Automático</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
|
||||
<source>Appearance</source>
|
||||
<target state="translated">Apariencia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2890,7 +2894,7 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Automático</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2898,7 +2902,7 @@
|
||||
<source>Light</source>
|
||||
<target state="translated">Claro</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2906,7 +2910,7 @@
|
||||
<source>Dark</source>
|
||||
<target state="translated">Oscuro</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3175,32 +3179,32 @@
|
||||
<target state="translated">Comunidad</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
|
||||
<source>Activities Count</source>
|
||||
@ -3374,7 +3378,7 @@
|
||||
<source>Valid until</source>
|
||||
<target state="new">Valid until</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3430,7 +3434,7 @@
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<target state="new"> Protection for sensitive information like absolute performances and quantity values </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3438,7 +3442,7 @@
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<target state="new"> Distraction-free experience for turbulent times </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3446,8 +3450,8 @@
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<target state="new"> Sneak peek at upcoming functionality </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3822,7 +3826,7 @@
|
||||
<source>Renew</source>
|
||||
<target state="new">Renew</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3871,7 +3875,7 @@
|
||||
<target state="new">By ETF Provider</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e0c92dc95e1e0fc33d21b5e2df5ea28a86439d56" datatype="html">
|
||||
@ -4071,7 +4075,7 @@
|
||||
<target state="new">Personal Finance</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
@ -4079,7 +4083,7 @@
|
||||
<target state="new">Frequently Asked Questions (FAQ)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -4155,7 +4159,7 @@
|
||||
<target state="new">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -4167,7 +4171,7 @@
|
||||
<target state="new">License</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -7035,7 +7039,7 @@
|
||||
<target state="new">ETFs without Countries</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
@ -7043,7 +7047,7 @@
|
||||
<target state="new">ETFs without Sectors</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ee8f8008bae6ce3a49840c4e1d39b4af23d4c263" datatype="html">
|
||||
@ -7086,6 +7090,198 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<target state="new">Welcome to Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<target state="new">Setup your accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<target state="new">Get a comprehensive financial overview by adding your bank and brokerage accounts.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<target state="new">Capture your activities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<target state="new">Record your investment activities to keep your portfolio up to date.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<target state="new">Monitor and analyze your portfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<target state="new">Track your progress in real-time with comprehensive analysis and insights.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<target state="new">No data available</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<target state="new">Ready to take control of your personal finances?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<target state="new">Setup accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<target state="new">Biometric Authentication</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<target state="new"> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<target state="new">Active Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<target state="new">New Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<target state="new">Users in Slack community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<target state="new">Contributors on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<target state="new">Stars on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<target state="new">Pulls on Docker Hub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<target state="new">Uptime</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<target state="new">Export Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<target state="new">Currencies</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<target state="new">Our</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<target state="new">Visit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<target state="translated">Le risque de perte en investissant peut être important. Il est déconseillé d'investir de l'argent dont vous pourriez avoir besoin à court terme.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fbaaeb297e70b9a800acf841b9d26c19d60651ef" datatype="html">
|
||||
@ -17,7 +17,7 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -40,10 +40,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -52,6 +48,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -254,7 +254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -468,10 +468,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -484,6 +480,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -504,10 +504,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -516,13 +512,17 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4550487415324294802" datatype="html">
|
||||
<source>Filter by...</source>
|
||||
<target state="translated">Filtrer par...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -578,7 +578,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
|
||||
@ -870,7 +870,7 @@
|
||||
<target state="translated">Ajouter</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
@ -878,7 +878,7 @@
|
||||
<target state="translated">Maintenance</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
@ -886,7 +886,7 @@
|
||||
<target state="translated">Vider le Cache</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -970,7 +970,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="44fcf77e86dc038202ebad6b46d1d833d60d781b" datatype="html">
|
||||
@ -1050,7 +1050,7 @@
|
||||
<target state="translated">Ressources</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1070,7 +1070,7 @@
|
||||
<target state="translated">Prix</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1190,7 +1190,7 @@
|
||||
<target state="translated">À propos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1230,7 +1230,7 @@
|
||||
<target state="translated">Fonctionnalités</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1246,7 +1246,7 @@
|
||||
<target state="translated">Marchés</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1782,11 +1782,11 @@
|
||||
<target state="translated">À propos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1798,7 +1798,7 @@
|
||||
<target state="translated">Historique des modifications</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1810,7 +1810,7 @@
|
||||
<target state="Politique de Vie Privée">License</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1822,7 +1822,7 @@
|
||||
<target state="Politique de Vie Privée">Politique de Vie Privée</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1834,7 +1834,7 @@
|
||||
<target state="translated">Politique de Vie Privée</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1845,7 +1845,7 @@
|
||||
<source>My Ghostfolio</source>
|
||||
<target state="translated">Mon Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1853,61 +1853,61 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5196970976032945030" datatype="html">
|
||||
<source>Please enter your coupon code:</source>
|
||||
<target state="translated">Veuillez entrer votre code promotionnel :</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<target state="translated">Le code promotionnel n'a pas pu être appliqué</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<target state="translated">Le code promotionnel a été appliqué</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<target state="translated">Rafraîchir</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<target state="translated">Voulez-vous vraiment supprimer cette méthode de connexion ?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<target state="translated">Compte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1917,7 +1917,7 @@
|
||||
<source>Membership</source>
|
||||
<target state="translated">Adhésion</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1925,7 +1925,7 @@
|
||||
<source>Upgrade</source>
|
||||
<target state="translated">Mettre à niveau</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1933,7 +1933,7 @@
|
||||
<source>per year</source>
|
||||
<target state="translated">par an</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1941,7 +1941,7 @@
|
||||
<source>Try Premium</source>
|
||||
<target state="translated">Essayer Premium</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1949,7 +1949,7 @@
|
||||
<source>Redeem Coupon</source>
|
||||
<target state="translated">Utiliser un Code Promotionnel</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1957,7 +1957,7 @@
|
||||
<source>Presenter View</source>
|
||||
<target state="translated">Vue de Présentation</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1965,7 +1965,7 @@
|
||||
<source>Base Currency</source>
|
||||
<target state="translated">Devise de Base</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1973,7 +1973,7 @@
|
||||
<source>Language</source>
|
||||
<target state="translated">Langue</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1982,38 +1982,38 @@
|
||||
<target state="translated">Communauté</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6b939b00e8481ed8aa8a24d8add7a209d7116759" datatype="html">
|
||||
<source>Locale</source>
|
||||
<target state="translated">Paramètres régionaux</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2021,7 +2021,7 @@
|
||||
<source>Date and number format</source>
|
||||
<target state="translated">Format de date et d'heure</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2029,7 +2029,7 @@
|
||||
<source>Appearance</source>
|
||||
<target state="translated">Apparence</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2037,7 +2037,7 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2045,7 +2045,7 @@
|
||||
<source>Light</source>
|
||||
<target state="translated">Clair</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2053,59 +2053,59 @@
|
||||
<source>Dark</source>
|
||||
<target state="translated">Sombre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<target state="translated">Mode Zen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<target state="translated">Se connecter avec empreinte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<target state="translated"> Se connecter avec empreinte </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="03b120b05e0922e5e830c3466fda9ee0bfbf59e9" datatype="html">
|
||||
<source>Experimental Features</source>
|
||||
<target state="translated">Fonctionnalités expérimentales</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<target state="translated">ID d'utilisateur</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<target state="translated">Accès donné</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<target state="translated">Donner accès</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2113,7 +2113,7 @@
|
||||
<source>Public</source>
|
||||
<target state="translated">Public</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2226,7 +2226,7 @@
|
||||
<target state="translated">Blog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -2388,6 +2388,10 @@
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<target state="translated">Ajouter Activité</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2526,7 +2530,7 @@
|
||||
<target state="translated">Filtrer par compte ou étiquette...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2558,7 +2562,7 @@
|
||||
<target state="translated">Par Compte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -2606,7 +2610,7 @@
|
||||
<target state="translated">Par Pays</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -2834,7 +2838,7 @@
|
||||
<target state="translated"> Ghostfolio vous aide à garder un aperçu de votre patrimoine. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
|
||||
@ -2846,7 +2850,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -3030,7 +3034,7 @@
|
||||
<target state="translated">Filtrer par compte, devise, symbole, ou type...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -3094,7 +3098,7 @@
|
||||
<target state="translated">Part</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
@ -3102,7 +3106,7 @@
|
||||
<target state="translated">Montrer tout</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4086606389696938932" datatype="html">
|
||||
@ -3373,7 +3377,7 @@
|
||||
<source>Valid until</source>
|
||||
<target state="translated">Valide jusqu'au</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3429,7 +3433,7 @@
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<target state="translated"> Protection pour les informations sensibles telles que la performance absolue et les montants </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3437,7 +3441,7 @@
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<target state="translated"> Expérience sans distraction pour les périodes tumultueuses </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3445,8 +3449,8 @@
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<target state="translated"> Avant-première de fonctionnalités futures </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3821,7 +3825,7 @@
|
||||
<source>Renew</source>
|
||||
<target state="translated">Renouveler</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3870,7 +3874,7 @@
|
||||
<target state="translated">Par Émetteur d'ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e0c92dc95e1e0fc33d21b5e2df5ea28a86439d56" datatype="html">
|
||||
@ -4070,7 +4074,7 @@
|
||||
<target state="translated">Finance Personnelle</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
@ -4078,7 +4082,7 @@
|
||||
<target state="translated">Questions Fréquentes (FAQ)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -4154,7 +4158,7 @@
|
||||
<target state="translated">Historique des Modifications</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -4166,7 +4170,7 @@
|
||||
<target state="translated">Licence</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -7034,7 +7038,7 @@
|
||||
<target state="new">ETFs without Countries</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
@ -7042,7 +7046,7 @@
|
||||
<target state="new">ETFs without Sectors</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ee8f8008bae6ce3a49840c4e1d39b4af23d4c263" datatype="html">
|
||||
@ -7085,6 +7089,198 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<target state="new">Welcome to Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<target state="new">Setup your accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<target state="new">Get a comprehensive financial overview by adding your bank and brokerage accounts.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<target state="new">Capture your activities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<target state="new">Record your investment activities to keep your portfolio up to date.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<target state="new">Monitor and analyze your portfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<target state="new">Track your progress in real-time with comprehensive analysis and insights.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<target state="new">No data available</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<target state="new">Ready to take control of your personal finances?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<target state="new">Setup accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<target state="new">Biometric Authentication</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<target state="new"> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<target state="new">Active Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<target state="new">New Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<target state="new">Users in Slack community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<target state="new">Contributors on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<target state="new">Stars on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<target state="new">Pulls on Docker Hub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<target state="new">Uptime</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<target state="new">Export Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<target state="new">Currencies</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<target state="new">Our</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<target state="new">Visit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<target state="new">Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6192ee60a5e0e40874f4d02fbaaa584a0f1541e" datatype="html">
|
||||
@ -41,10 +41,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -53,6 +49,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -191,7 +191,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -405,10 +405,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -421,6 +417,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -441,10 +441,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -453,6 +449,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
<source>First Activity</source>
|
||||
@ -467,7 +467,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
|
||||
@ -623,7 +623,7 @@
|
||||
<target state="translated">Aggiungi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
@ -631,7 +631,7 @@
|
||||
<target state="translated">Bilancio domestico</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
@ -639,7 +639,7 @@
|
||||
<target state="translated">Svuota la cache</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -759,7 +759,7 @@
|
||||
<target state="translated">Risorse</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -779,7 +779,7 @@
|
||||
<target state="translated">Prezzi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -899,7 +899,7 @@
|
||||
<target state="translated">Informazioni su</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -939,7 +939,7 @@
|
||||
<target state="translated">Funzionalità</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -955,7 +955,7 @@
|
||||
<target state="translated">Mercati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -979,7 +979,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1323,7 +1323,7 @@
|
||||
<target state="translated">Allocazione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1339,7 +1339,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
@ -1347,7 +1347,7 @@
|
||||
<target state="translated">Mostra tutti</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -1431,11 +1431,11 @@
|
||||
<target state="translated">Informazioni su</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1447,7 +1447,7 @@
|
||||
<target state="translated">Informativa sulla privacy</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1459,7 +1459,7 @@
|
||||
<target state="translated">Blog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -1527,7 +1527,7 @@
|
||||
<target state="translated">Registro delle modifiche</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1539,7 +1539,7 @@
|
||||
<target state="translated">Licenza d'uso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1551,7 +1551,7 @@
|
||||
<target state="translated">Informativa sulla privacy</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1562,7 +1562,7 @@
|
||||
<source>My Ghostfolio</source>
|
||||
<target state="translated">Il mio Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1570,53 +1570,53 @@
|
||||
<source>Please enter your coupon code:</source>
|
||||
<target state="translated">Inserisci il tuo codice del buono:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<target state="translated">Impossibile riscattare il codice del buono</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<target state="translated">Il codice del buono è stato riscattato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<target state="translated">Ricarica</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<target state="translated">Vuoi davvero rimuovere questo metodo di accesso?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<target state="translated">Account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1626,7 +1626,7 @@
|
||||
<source>Membership</source>
|
||||
<target state="translated">Iscrizione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1634,7 +1634,7 @@
|
||||
<source>Upgrade</source>
|
||||
<target state="translated">Aggiornamento</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1642,7 +1642,7 @@
|
||||
<source>per year</source>
|
||||
<target state="translated">per anno</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1650,7 +1650,7 @@
|
||||
<source>Try Premium</source>
|
||||
<target state="translated">Prova Premium</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1658,7 +1658,7 @@
|
||||
<source>Redeem Coupon</source>
|
||||
<target state="translated">Riscatta il buono</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1666,7 +1666,7 @@
|
||||
<source>Presenter View</source>
|
||||
<target state="translated">Vista presentatore</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1674,7 +1674,7 @@
|
||||
<source>Base Currency</source>
|
||||
<target state="translated">Valuta base</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1682,7 +1682,7 @@
|
||||
<source>Locale</source>
|
||||
<target state="translated">Locale</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1690,51 +1690,51 @@
|
||||
<source>Date and number format</source>
|
||||
<target state="translated">Formato data e numero</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<target state="translated">Modalità Zen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<target state="translated">Accesso con impronta digitale</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<target state="translated"> Accesso con impronta digitale </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<target state="translated">ID utente</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<target state="translated">Accesso concesso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<target state="translated">Concedi l'accesso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1742,7 +1742,7 @@
|
||||
<source>Public</source>
|
||||
<target state="translated">Pubblico</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1955,7 +1955,7 @@
|
||||
<target state="translated">Per account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -2003,7 +2003,7 @@
|
||||
<target state="translated">Per paese</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -2141,6 +2141,10 @@
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<target state="translated">Aggiungi un'attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2319,7 +2323,7 @@
|
||||
<target state="translated">Ghostfolio ti permette di tenere traccia della tua ricchezza. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -2510,7 +2514,7 @@
|
||||
<source>Language</source>
|
||||
<target state="translated">Lingua</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2775,7 +2779,7 @@
|
||||
<target state="translated">Filtra per account o tag...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2791,7 +2795,7 @@
|
||||
<target state="translated">Filtra per...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="303469635941752458" datatype="html">
|
||||
@ -2799,7 +2803,7 @@
|
||||
<target state="translated">Filtra per account, valuta, simbolo o tipo...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2818,7 +2822,7 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2826,8 +2830,8 @@
|
||||
<source>Experimental Features</source>
|
||||
<target state="translated">Funzionalità sperimentali</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1931353503905413384" datatype="html">
|
||||
@ -2874,15 +2878,15 @@
|
||||
<source>Auto</source>
|
||||
<target state="new">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
|
||||
<source>Appearance</source>
|
||||
<target state="new">Appearance</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2890,7 +2894,7 @@
|
||||
<source>Auto</source>
|
||||
<target state="new">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2898,7 +2902,7 @@
|
||||
<source>Light</source>
|
||||
<target state="new">Light</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2906,7 +2910,7 @@
|
||||
<source>Dark</source>
|
||||
<target state="new">Dark</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3175,32 +3179,32 @@
|
||||
<target state="new">Community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
|
||||
<source>Activities Count</source>
|
||||
@ -3374,7 +3378,7 @@
|
||||
<source>Valid until</source>
|
||||
<target state="new">Valid until</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3430,7 +3434,7 @@
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<target state="new"> Protection for sensitive information like absolute performances and quantity values </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3438,7 +3442,7 @@
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<target state="new"> Distraction-free experience for turbulent times </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3446,8 +3450,8 @@
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<target state="new"> Sneak peek at upcoming functionality </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3822,7 +3826,7 @@
|
||||
<source>Renew</source>
|
||||
<target state="new">Renew</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3871,7 +3875,7 @@
|
||||
<target state="new">By ETF Provider</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e0c92dc95e1e0fc33d21b5e2df5ea28a86439d56" datatype="html">
|
||||
@ -4071,7 +4075,7 @@
|
||||
<target state="new">Personal Finance</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
@ -4079,7 +4083,7 @@
|
||||
<target state="new">Frequently Asked Questions (FAQ)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -4155,7 +4159,7 @@
|
||||
<target state="new">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -4167,7 +4171,7 @@
|
||||
<target state="new">License</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -7035,7 +7039,7 @@
|
||||
<target state="new">ETFs without Countries</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
@ -7043,7 +7047,7 @@
|
||||
<target state="new">ETFs without Sectors</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ee8f8008bae6ce3a49840c4e1d39b4af23d4c263" datatype="html">
|
||||
@ -7086,6 +7090,198 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<target state="new">Welcome to Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<target state="new">Setup your accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<target state="new">Get a comprehensive financial overview by adding your bank and brokerage accounts.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<target state="new">Capture your activities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<target state="new">Record your investment activities to keep your portfolio up to date.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<target state="new">Monitor and analyze your portfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<target state="new">Track your progress in real-time with comprehensive analysis and insights.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<target state="new">No data available</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<target state="new">Ready to take control of your personal finances?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<target state="new">Setup accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<target state="new">Biometric Authentication</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<target state="new"> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<target state="new">Active Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<target state="new">New Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<target state="new">Users in Slack community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<target state="new">Contributors on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<target state="new">Stars on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<target state="new">Pulls on Docker Hub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<target state="new">Uptime</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<target state="new">Export Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<target state="new">Currencies</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<target state="new">Our</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<target state="new">Visit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -18,7 +18,7 @@
|
||||
<target state="new">Het risico van verlies in de handel kan aanzienlijk zijn. Het is niet raadzaam om geld te beleggen dat u op korte termijn nodig kunt hebben.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6192ee60a5e0e40874f4d02fbaaa584a0f1541e" datatype="html">
|
||||
@ -40,10 +40,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -52,6 +48,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -190,7 +190,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -404,10 +404,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -420,6 +416,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -440,10 +440,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -452,6 +448,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
<source>First Activity</source>
|
||||
@ -466,7 +466,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
|
||||
@ -622,7 +622,7 @@
|
||||
<target state="translated">Toevoegen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
@ -630,7 +630,7 @@
|
||||
<target state="translated">Huishouding</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
@ -638,7 +638,7 @@
|
||||
<target state="translated">Cache legen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -758,7 +758,7 @@
|
||||
<target state="translated">Middelen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -778,7 +778,7 @@
|
||||
<target state="translated">Prijzen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -898,7 +898,7 @@
|
||||
<target state="translated">Over</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -938,7 +938,7 @@
|
||||
<target state="translated">Kenmerken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -954,7 +954,7 @@
|
||||
<target state="translated">Markten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -978,7 +978,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1322,7 +1322,7 @@
|
||||
<target state="translated">Toewijzing</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1338,7 +1338,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
@ -1346,7 +1346,7 @@
|
||||
<target state="translated">Toon alle</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -1430,11 +1430,11 @@
|
||||
<target state="translated">Over</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1446,7 +1446,7 @@
|
||||
<target state="translated">Privacybeleid</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1458,7 +1458,7 @@
|
||||
<target state="translated">Blog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -1526,7 +1526,7 @@
|
||||
<target state="translated">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1538,7 +1538,7 @@
|
||||
<target state="translated">Licentie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1550,7 +1550,7 @@
|
||||
<target state="translated">Privacybeleid</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1561,7 +1561,7 @@
|
||||
<source>My Ghostfolio</source>
|
||||
<target state="translated">Mijn Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1569,53 +1569,53 @@
|
||||
<source>Please enter your coupon code:</source>
|
||||
<target state="translated">Voer uw couponcode in:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<target state="translated">Kon kortingscode niet inwisselen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<target state="translated">Couponcode is ingewisseld</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<target state="translated">Herladen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<target state="translated">Wilt u deze aanmeldingsmethode echt verwijderen?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<target state="translated">Account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1625,7 +1625,7 @@
|
||||
<source>Membership</source>
|
||||
<target state="translated">Lidmaatschap</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1633,7 +1633,7 @@
|
||||
<source>Upgrade</source>
|
||||
<target state="translated">Upgrade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1641,7 +1641,7 @@
|
||||
<source>per year</source>
|
||||
<target state="translated">per jaar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1649,7 +1649,7 @@
|
||||
<source>Try Premium</source>
|
||||
<target state="translated">Probeer Premium</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1657,7 +1657,7 @@
|
||||
<source>Redeem Coupon</source>
|
||||
<target state="translated">Coupon inwisselen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1665,7 +1665,7 @@
|
||||
<source>Presenter View</source>
|
||||
<target state="translated">Presentatorweergave</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1673,7 +1673,7 @@
|
||||
<source>Base Currency</source>
|
||||
<target state="translated">Basisvaluta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1681,7 +1681,7 @@
|
||||
<source>Locale</source>
|
||||
<target state="translated">Locale</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1689,51 +1689,51 @@
|
||||
<source>Date and number format</source>
|
||||
<target state="translated">Formaat datum en getal</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<target state="translated">Zen-modus</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<target state="translated">Aanmelden met vingerafdruk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<target state="translated"> Aanmelden met vingerafdruk </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<target state="translated">Gebruikers-ID</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<target state="translated">Verleende toegang</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<target state="translated">Toegang verlenen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1741,7 +1741,7 @@
|
||||
<source>Public</source>
|
||||
<target state="translated">Openbaar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1954,7 +1954,7 @@
|
||||
<target state="translated">Per rekening</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -2002,7 +2002,7 @@
|
||||
<target state="translated">Per land</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -2140,6 +2140,10 @@
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<target state="translated">Activiteit toevoegen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2318,7 +2322,7 @@
|
||||
<target state="translated">Ghostfolio stelt u in staat om uw vermogen bij te houden. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -2509,7 +2513,7 @@
|
||||
<source>Language</source>
|
||||
<target state="translated">Taal</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2774,7 +2778,7 @@
|
||||
<target state="translated">Filter op account of tag...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2790,7 +2794,7 @@
|
||||
<target state="translated">Filter op...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="303469635941752458" datatype="html">
|
||||
@ -2798,7 +2802,7 @@
|
||||
<target state="translated">Filter op rekening, valuta, symbool of type...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2817,7 +2821,7 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2825,8 +2829,8 @@
|
||||
<source>Experimental Features</source>
|
||||
<target state="translated">Experimentele functies</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1931353503905413384" datatype="html">
|
||||
@ -2873,15 +2877,15 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
|
||||
<source>Appearance</source>
|
||||
<target state="translated">Weergave</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2889,7 +2893,7 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Automatisch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2897,7 +2901,7 @@
|
||||
<source>Light</source>
|
||||
<target state="translated">Licht</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2905,7 +2909,7 @@
|
||||
<source>Dark</source>
|
||||
<target state="translated">Donker</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3174,32 +3178,32 @@
|
||||
<target state="translated">Gemeenschap</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
|
||||
<source>Activities Count</source>
|
||||
@ -3373,7 +3377,7 @@
|
||||
<source>Valid until</source>
|
||||
<target state="new">Valid until</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3429,7 +3433,7 @@
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<target state="new"> Protection for sensitive information like absolute performances and quantity values </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3437,7 +3441,7 @@
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<target state="new"> Distraction-free experience for turbulent times </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3445,8 +3449,8 @@
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<target state="new"> Sneak peek at upcoming functionality </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3821,7 +3825,7 @@
|
||||
<source>Renew</source>
|
||||
<target state="new">Renew</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3870,7 +3874,7 @@
|
||||
<target state="new">By ETF Provider</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e0c92dc95e1e0fc33d21b5e2df5ea28a86439d56" datatype="html">
|
||||
@ -4070,7 +4074,7 @@
|
||||
<target state="new">Personal Finance</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
@ -4078,7 +4082,7 @@
|
||||
<target state="new">Frequently Asked Questions (FAQ)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -4154,7 +4158,7 @@
|
||||
<target state="new">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -4166,7 +4170,7 @@
|
||||
<target state="new">License</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -7034,7 +7038,7 @@
|
||||
<target state="new">ETFs without Countries</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
@ -7042,7 +7046,7 @@
|
||||
<target state="new">ETFs without Sectors</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ee8f8008bae6ce3a49840c4e1d39b4af23d4c263" datatype="html">
|
||||
@ -7085,6 +7089,198 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<target state="new">Welcome to Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<target state="new">Setup your accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<target state="new">Get a comprehensive financial overview by adding your bank and brokerage accounts.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<target state="new">Capture your activities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<target state="new">Record your investment activities to keep your portfolio up to date.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<target state="new">Monitor and analyze your portfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<target state="new">Track your progress in real-time with comprehensive analysis and insights.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<target state="new">No data available</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<target state="new">Ready to take control of your personal finances?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<target state="new">Setup accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<target state="new">Biometric Authentication</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<target state="new"> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<target state="new">Active Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<target state="new">New Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<target state="new">Users in Slack community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<target state="new">Contributors on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<target state="new">Stars on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<target state="new">Pulls on Docker Hub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<target state="new">Uptime</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<target state="new">Export Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<target state="new">Currencies</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<target state="new">Our</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<target state="new">Visit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<target state="translated">O risco de perda em investimentos pode ser substancial. Não é aconselhável investir dinheiro que possa vir a precisar a curto prazo.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fbaaeb297e70b9a800acf841b9d26c19d60651ef" datatype="html">
|
||||
@ -17,7 +17,7 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -40,10 +40,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -52,6 +48,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -254,7 +254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -468,10 +468,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -484,6 +480,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -504,10 +504,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -516,13 +512,17 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4550487415324294802" datatype="html">
|
||||
<source>Filter by...</source>
|
||||
<target state="translated">Filtrar por...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -578,7 +578,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
|
||||
@ -750,7 +750,7 @@
|
||||
<target state="translated">Adicionar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
@ -758,7 +758,7 @@
|
||||
<target state="translated">Manutenção</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
@ -766,7 +766,7 @@
|
||||
<target state="translated">Limpar Cache</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -850,7 +850,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="44fcf77e86dc038202ebad6b46d1d833d60d781b" datatype="html">
|
||||
@ -930,7 +930,7 @@
|
||||
<target state="translated">Recursos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -950,7 +950,7 @@
|
||||
<target state="translated">Preços</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1070,7 +1070,7 @@
|
||||
<target state="translated">Sobre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1110,7 +1110,7 @@
|
||||
<target state="translated">Funcionalidades</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1126,7 +1126,7 @@
|
||||
<target state="translated">Mercados</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -1662,7 +1662,7 @@
|
||||
<target state="translated">Alocação</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
@ -1670,7 +1670,7 @@
|
||||
<target state="translated">Mostrar tudo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -1766,11 +1766,11 @@
|
||||
<target state="translated">Sobre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1782,7 +1782,7 @@
|
||||
<target state="translated">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1794,7 +1794,7 @@
|
||||
<target state="translated">Licença</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1806,7 +1806,7 @@
|
||||
<target state="translated">Política de Privacidade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1818,7 +1818,7 @@
|
||||
<target state="translated">Política de Privacidade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1829,7 +1829,7 @@
|
||||
<source>My Ghostfolio</source>
|
||||
<target state="translated">O meu Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1837,61 +1837,61 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5196970976032945030" datatype="html">
|
||||
<source>Please enter your coupon code:</source>
|
||||
<target state="translated">Por favor, insira o seu código de cupão:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<target state="translated">Não foi possível resgatar o código de cupão</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<target state="translated">Código de cupão foi resgatado</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<target state="translated">Atualizar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<target state="translated">Deseja realmente remover este método de início de sessão?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<target state="translated">Conta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1901,7 +1901,7 @@
|
||||
<source>Membership</source>
|
||||
<target state="translated">Filiação</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1909,7 +1909,7 @@
|
||||
<source>Upgrade</source>
|
||||
<target state="translated">Atualizar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1917,7 +1917,7 @@
|
||||
<source>per year</source>
|
||||
<target state="translated">por ano</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1925,7 +1925,7 @@
|
||||
<source>Try Premium</source>
|
||||
<target state="translated">Experimentar Premium</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1933,7 +1933,7 @@
|
||||
<source>Redeem Coupon</source>
|
||||
<target state="translated">Resgatar Cupão</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1941,7 +1941,7 @@
|
||||
<source>Presenter View</source>
|
||||
<target state="translated">Vista do Apresentador</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1949,7 +1949,7 @@
|
||||
<source>Base Currency</source>
|
||||
<target state="translated">Moeda Base</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1957,7 +1957,7 @@
|
||||
<source>Language</source>
|
||||
<target state="translated">Língua</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1977,7 +1977,7 @@
|
||||
<source>Locale</source>
|
||||
<target state="translated">Localidade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1985,27 +1985,27 @@
|
||||
<source>Date and number format</source>
|
||||
<target state="translated">Formato de números e datas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<target state="translated">Modo Zen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
|
||||
<source>Appearance</source>
|
||||
<target state="translated">Aparência</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2013,7 +2013,7 @@
|
||||
<source>Auto</source>
|
||||
<target state="translated">Auto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2021,7 +2021,7 @@
|
||||
<source>Light</source>
|
||||
<target state="translated">Claro</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2029,47 +2029,47 @@
|
||||
<source>Dark</source>
|
||||
<target state="translated">Escuro</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<target state="translated">Iniciar sessão com impressão digital</target>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<target state="translated"> Iniciar sessão com impressão digital </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="03b120b05e0922e5e830c3466fda9ee0bfbf59e9" datatype="html">
|
||||
<source>Experimental Features</source>
|
||||
<target state="translated">Funcionalidades Experimentais</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<target state="translated">ID do Utilizador</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<target state="translated">Acesso Concedido</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<target state="translated">Conceder Acesso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2077,7 +2077,7 @@
|
||||
<source>Public</source>
|
||||
<target state="translated">Público</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2154,7 +2154,7 @@
|
||||
<target state="translated">Blog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -2300,6 +2300,10 @@
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<target state="translated">Adicionar atividade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2446,7 +2450,7 @@
|
||||
<target state="translated">Filtrar por conta ou marcador...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2478,7 +2482,7 @@
|
||||
<target state="translated">Por Conta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -2526,7 +2530,7 @@
|
||||
<target state="translated">Por País</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -2742,7 +2746,7 @@
|
||||
<target state="translated"> O Ghostfolio permite-lhe estar a par e gerir a sua riqueza. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
|
||||
@ -2754,7 +2758,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -2918,7 +2922,7 @@
|
||||
<target state="translated">Filtrar por conta, moeda, símbolo ou tipo...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -3230,32 +3234,32 @@
|
||||
<target state="translated">Comunidade</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4798457301875181136" datatype="html">
|
||||
<source>Market Data</source>
|
||||
@ -3373,7 +3377,7 @@
|
||||
<source>Valid until</source>
|
||||
<target state="translated">Válido até</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3429,7 +3433,7 @@
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<target state="translated"> Proteção para informações sensíveis, como desempenhos absolutos e valores quantitativos </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3437,7 +3441,7 @@
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<target state="translated"> Experiência sem distrações para tempos turbulentos </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3445,8 +3449,8 @@
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<target state="translated"> Acesso antecipado a funcionalidades futuras </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3821,7 +3825,7 @@
|
||||
<source>Renew</source>
|
||||
<target state="translated">Renovar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3870,7 +3874,7 @@
|
||||
<target state="translated">Por Prestador de ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e0c92dc95e1e0fc33d21b5e2df5ea28a86439d56" datatype="html">
|
||||
@ -4070,7 +4074,7 @@
|
||||
<target state="translated">Finanças pessoais</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
@ -4078,7 +4082,7 @@
|
||||
<target state="translated">Perguntas Frequentes (FAQ)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -4154,7 +4158,7 @@
|
||||
<target state="new">Changelog</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -4166,7 +4170,7 @@
|
||||
<target state="new">License</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -7034,7 +7038,7 @@
|
||||
<target state="new">ETFs without Countries</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
@ -7042,7 +7046,7 @@
|
||||
<target state="new">ETFs without Sectors</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ee8f8008bae6ce3a49840c4e1d39b4af23d4c263" datatype="html">
|
||||
@ -7085,6 +7089,198 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<target state="new">Welcome to Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<target state="new">Setup your accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<target state="new">Get a comprehensive financial overview by adding your bank and brokerage accounts.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<target state="new">Capture your activities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<target state="new">Record your investment activities to keep your portfolio up to date.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<target state="new">Monitor and analyze your portfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<target state="new">Track your progress in real-time with comprehensive analysis and insights.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<target state="new">No data available</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<target state="new">Ready to take control of your personal finances?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<target state="new">Setup accounts</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<target state="new">Biometric Authentication</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<target state="new"> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<target state="new">Active Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<target state="new">New Users</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<target state="new">Users in Slack community</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<target state="new">Contributors on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<target state="new">Stars on GitHub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<target state="new">Pulls on Docker Hub</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<target state="new">Uptime</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<target state="new">Export Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<target state="new">Currencies</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<target state="new">Our</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<target state="new">Visit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<source>The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">180,181</context>
|
||||
<context context-type="linenumber">181,182</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6192ee60a5e0e40874f4d02fbaaa584a0f1541e" datatype="html">
|
||||
@ -37,10 +37,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<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="linenumber">13</context>
|
||||
@ -49,6 +45,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
@ -180,7 +180,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||
@ -375,10 +375,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<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="linenumber">88</context>
|
||||
@ -391,6 +387,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">
|
||||
<source>Save</source>
|
||||
@ -410,10 +410,6 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<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="linenumber">95</context>
|
||||
@ -422,6 +418,10 @@
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
<source>First Activity</source>
|
||||
@ -435,7 +435,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
|
||||
@ -572,21 +572,21 @@
|
||||
<source>Add</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e799e6b926557f0098f41888cdf8df868eff3d47" datatype="html">
|
||||
<source>Housekeeping</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7ac907e52a7ce2ac70b1786eb5f403ce306ce1f" datatype="html">
|
||||
<source>Flush Cache</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2817099043823177227" datatype="html">
|
||||
@ -695,7 +695,7 @@
|
||||
<source>Resources</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -714,7 +714,7 @@
|
||||
<source>Pricing</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -833,7 +833,7 @@
|
||||
<source>About</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -869,7 +869,7 @@
|
||||
<source>Features</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -884,7 +884,7 @@
|
||||
<source>Markets</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
@ -907,7 +907,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1217,7 +1217,7 @@
|
||||
<source>Allocation</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1232,14 +1232,14 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||
<source>Show all</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/holdings-table/holdings-table.component.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -1314,11 +1314,11 @@
|
||||
<source>About</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts</context>
|
||||
@ -1329,7 +1329,7 @@
|
||||
<source>Privacy Policy</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html</context>
|
||||
@ -1340,7 +1340,7 @@
|
||||
<source>Blog</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html</context>
|
||||
@ -1407,7 +1407,7 @@
|
||||
<source>Changelog</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page.html</context>
|
||||
@ -1418,7 +1418,7 @@
|
||||
<source>License</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page.html</context>
|
||||
@ -1429,7 +1429,7 @@
|
||||
<source>Privacy Policy</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts</context>
|
||||
@ -1439,55 +1439,55 @@
|
||||
<trans-unit id="3453373677180899990" datatype="html">
|
||||
<source>My Ghostfolio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page-routing.module.ts</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page-routing.module.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5196970976032945030" datatype="html">
|
||||
<source>Please enter your coupon code:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">236</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4420880039966769543" datatype="html">
|
||||
<source>Could not redeem coupon code</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4819099731531004979" datatype="html">
|
||||
<source>Coupon code has been redeemed</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7967484035994732534" datatype="html">
|
||||
<source>Reload</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">259</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7963559562180316948" datatype="html">
|
||||
<source>Do you really want to remove this sign in method?</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="29881a45dafbe5aa05cd9d0441a4c0c2fb06df92" datatype="html">
|
||||
<source>Account</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
<context context-type="linenumber">406</context>
|
||||
@ -1496,109 +1496,109 @@
|
||||
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
|
||||
<source>Membership</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f147d0f7f965cccee2e77294cba8e1b88021fa08" datatype="html">
|
||||
<source>Upgrade</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="218afa01afa0cfc71b1a6507a3387763ecaa9332" datatype="html">
|
||||
<source>per year</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="de39d1e0259f376956df2f14bb285f98ad8a1bcc" datatype="html">
|
||||
<source>Try Premium</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e34001a9b79e0e3de1491662187e1d6b29c4c04e" datatype="html">
|
||||
<source>Redeem Coupon</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="049ff8024875936b5837b8f9a2441870458fe3cc" datatype="html">
|
||||
<source>Presenter View</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68baf7bff1f9242d0f6e4c0952dafefa6553cecd" datatype="html">
|
||||
<source>Base Currency</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6b939b00e8481ed8aa8a24d8add7a209d7116759" datatype="html">
|
||||
<source>Locale</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">169</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4402006eb2c97591dd8c87a5bd8f721fe9e4dc00" datatype="html">
|
||||
<source>Date and number format</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
|
||||
<source>Zen Mode</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
|
||||
<source>Sign in with fingerprint</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="78cf1b9b94e0e93e65d1d522001a5c54304e9f25" datatype="html">
|
||||
<source> Sign in with fingerprint </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">240,242</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
|
||||
<source>User ID</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9021c579c084e68d9db06a569d76f024111c6c54" datatype="html">
|
||||
<source>Granted Access</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
|
||||
<source>Grant access</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c4c080864b313cfdff5fdea6aae5da276246d99" datatype="html">
|
||||
<source>Public</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -1792,7 +1792,7 @@
|
||||
<source>By Account</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">290</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b79f5520c0cb9a00bd589e8a4c86ffcf5ae439d7" datatype="html">
|
||||
@ -1834,7 +1834,7 @@
|
||||
<source>By Country</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="85780db87ac6c9f202615ac63754551c061e7236" datatype="html">
|
||||
@ -1958,6 +1958,10 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
@ -2121,7 +2125,7 @@
|
||||
<source> Ghostfolio empowers you to keep track of your wealth. </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">135,137</context>
|
||||
<context context-type="linenumber">147,149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298333184054476827" datatype="html">
|
||||
@ -2289,7 +2293,7 @@
|
||||
<trans-unit id="fe46ccaae902ce974e2441abe752399288298619" datatype="html">
|
||||
<source>Language</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2528,7 +2532,7 @@
|
||||
<source>Filter by account or tag...</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts</context>
|
||||
<context context-type="linenumber">141</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
|
||||
@ -2543,14 +2547,14 @@
|
||||
<source>Filter by...</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="303469635941752458" datatype="html">
|
||||
<source>Filter by account, currency, symbol or type...</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2567,15 +2571,15 @@
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="03b120b05e0922e5e830c3466fda9ee0bfbf59e9" datatype="html">
|
||||
<source>Experimental Features</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">258</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1931353503905413384" datatype="html">
|
||||
@ -2616,35 +2620,35 @@
|
||||
<trans-unit id="5fb13fb4a8447e59cdf05dc196ade39c02a6f8aa" datatype="html">
|
||||
<source>Auto</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">212</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="616064537937996961" datatype="html">
|
||||
<source>Auto</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="693d14f486a25e86bc515dfcfc4462d5201217ef" datatype="html">
|
||||
<source>Light</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="adb4562d2dbd3584370e44496969d58c511ecb63" datatype="html">
|
||||
<source>Dark</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
|
||||
<source>Appearance</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -2881,32 +2885,32 @@
|
||||
<source>Community</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
<context context-type="linenumber">116</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">160</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
|
||||
<source>Activities Count</source>
|
||||
@ -3103,29 +3107,29 @@
|
||||
<trans-unit id="d82473cef3cd2258eab20223ffcdd5af0c0025cc" datatype="html">
|
||||
<source>Valid until</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2e744a88d8fa3204bb7cf407e7e3f3680f9e67a4" datatype="html">
|
||||
<source> Distraction-free experience for turbulent times </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">224,226</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
<source> Protection for sensitive information like absolute performances and quantity values </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">85,88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b706a0f7740f8180094b8f6144462d121da49aa4" datatype="html">
|
||||
<source> Sneak peek at upcoming functionality </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="linenumber">254,256</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">259,261</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
|
||||
@ -3472,7 +3476,7 @@
|
||||
<trans-unit id="fe5419755f32b91e95d8cb4248958026f25c6033" datatype="html">
|
||||
<source>Renew</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/account/account-page.html</context>
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
@ -3487,7 +3491,7 @@
|
||||
<source>By ETF Provider</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c32a07710e402b2c056bd346e7c42f6015334a6" datatype="html">
|
||||
@ -3685,14 +3689,14 @@
|
||||
<source>Personal Finance</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6992d42edf46c12a4a9ecb3b7a46761a967c8ee1" datatype="html">
|
||||
<source>Frequently Asked Questions (FAQ)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
<context context-type="linenumber">88</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1c275927e7e22395d21a86e4ab459e428bcac27e" datatype="html">
|
||||
@ -3787,7 +3791,7 @@
|
||||
<source>License</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/license/license-page-routing.module.ts</context>
|
||||
@ -3798,7 +3802,7 @@
|
||||
<source>Changelog</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts</context>
|
||||
@ -6599,14 +6603,14 @@
|
||||
<source>ETFs without Countries</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2346990364415437072" datatype="html">
|
||||
<source>ETFs without Sectors</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6333857424161463201" datatype="html">
|
||||
@ -6644,6 +6648,175 @@
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0038953528872613d2eff0ed3912b109d9e9b5cf" datatype="html">
|
||||
<source>No data available</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d0333063dd1cd5062db56f859be74bdfb25a7f3" datatype="html">
|
||||
<source>Monitor and analyze your portfolio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43cc09795191db2dc5925aed2b8f920e1822e13f" datatype="html">
|
||||
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">19,20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4747213591a189a98d5aface48f2755f863025a4" datatype="html">
|
||||
<source>Capture your activities</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fafe6662f57e08bca1f26bc2d2c9631a106ba29" datatype="html">
|
||||
<source>Welcome to Ghostfolio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71c2ec88fc3953a1db6cfca218173fcf489fa803" datatype="html">
|
||||
<source>Setup your accounts</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="804b8810cfbf317424a9fd6387ad57ec5bec972c" datatype="html">
|
||||
<source>Record your investment activities to keep your portfolio up to date.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">28,29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8bcb7e0eac9c406765fadda3238974f271facce6" datatype="html">
|
||||
<source>Track your progress in real-time with comprehensive analysis and insights.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">37,38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||
<source>Ready to take control of your personal finances?</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bdfdbf86e61060cf785b6bd53692b47c9afec63" datatype="html">
|
||||
<source>Setup accounts</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fa22693b23a8bed32d787023df105a7b40002f9c" datatype="html">
|
||||
<source>Biometric Authentication</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1de491c923555d6422bc6f1146357eb2b47853da" datatype="html">
|
||||
<source>Active Users</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="512b096f732f5e05dc1c451276b7a2b1a2509acd" datatype="html">
|
||||
<source>Pulls on Docker Hub</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8c4cfd77b7b3d7917de13bec98a8a74890f95618" datatype="html">
|
||||
<source>New Users</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d0f35e084b3902a5b04ee86cfde0d4b991a93af" datatype="html">
|
||||
<source> At Ghostfolio, transparency is at the core of our values. We publish the source code as <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://github.com/ghostfolio/ghostfolio" title="Find Ghostfolio on GitHub" >"/>open source software<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> (OSS) under the <x id="START_LINK_1" equiv-text="<a href="https://www.gnu.org/licenses/agpl-3.0.html" title="GNU Affero General Public License" >"/>AGPL-3.0 license<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a >"/> and we openly share aggregated key metrics of the platform’s operational status. </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">6,22</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8d3932a9eba50bc101c2b8c329e7b4ea033cde97" datatype="html">
|
||||
<source>Stars on GitHub</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="be99161cc904867871ab172df77b736d3b27dfc5" datatype="html">
|
||||
<source>Contributors on GitHub</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c0eb011366e597e23542be386e8bc0d53470b520" datatype="html">
|
||||
<source>Users in Slack community</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ed1d16219cf7cc3ad92d2d49f0c55bbafe3768b2" datatype="html">
|
||||
<source>Uptime</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/open/open-page.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="35a09ebb1f8ae079a58f2ab952be62e354a51672" datatype="html">
|
||||
<source>Export Data</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/user-account/user-account-page.html</context>
|
||||
<context context-type="linenumber">280</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8298612418414367990" datatype="html">
|
||||
<source>Currencies</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.component.ts</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6bf6d7aaba2bcbbd200e6869bbfdafc5991d5df8" datatype="html">
|
||||
<source>Visit</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc5d27ff889e9ac6d1f33ba419ec2d5fe923cfe3" datatype="html">
|
||||
<source>Our</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/about/oss-friends/oss-friends-page.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -253,6 +253,7 @@ body {
|
||||
|
||||
.mat-mdc-card {
|
||||
--mdc-elevated-card-container-color: var(--dark-background);
|
||||
--mdc-outlined-card-container-color: var(--dark-background);
|
||||
}
|
||||
|
||||
.mat-mdc-fab {
|
||||
@ -262,7 +263,6 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-paginator,
|
||||
.mat-mdc-paginator {
|
||||
background-color: rgba(var(--palette-foreground-base-dark), 0.02);
|
||||
}
|
||||
@ -421,7 +421,6 @@ ngx-skeleton-loader {
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-paginator,
|
||||
.mat-mdc-paginator {
|
||||
background-color: rgba(var(--palette-foreground-base-light), 0.02);
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
"compilerOptions": {
|
||||
"outDir": "../../dist/out-tsc",
|
||||
"types": ["node"],
|
||||
"typeRoots": ["../node_modules/@types"],
|
||||
"typeRoots": ["../../node_modules/@types"],
|
||||
"target": "ES2022",
|
||||
"useDefineForClassFields": false
|
||||
},
|
||||
|
@ -35,9 +35,12 @@ export const DATA_GATHERING_QUEUE = 'DATA_GATHERING_QUEUE';
|
||||
export const DATA_GATHERING_QUEUE_PRIORITY_LOW = Number.MAX_SAFE_INTEGER;
|
||||
export const DATA_GATHERING_QUEUE_PRIORITY_HIGH = 1;
|
||||
|
||||
export const DEFAULT_CURRENCY = 'USD';
|
||||
export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy';
|
||||
export const DEFAULT_LANGUAGE_CODE = 'en';
|
||||
export const DEFAULT_PAGE_SIZE = 50;
|
||||
export const DEFAULT_REQUEST_TIMEOUT = ms('3 seconds');
|
||||
export const DEFAULT_ROOT_URL = 'http://localhost:4200';
|
||||
|
||||
export const EMERGENCY_FUND_TAG_ID = '4452656d-9fa4-4bd0-ba38-70492e31d180';
|
||||
|
||||
@ -91,4 +94,14 @@ export const QUEUE_JOB_STATUS_LIST = <JobStatus[]>[
|
||||
'waiting'
|
||||
];
|
||||
|
||||
export const SUPPORTED_LANGUAGE_CODES = [
|
||||
'de',
|
||||
'en',
|
||||
'es',
|
||||
'fr',
|
||||
'it',
|
||||
'nl',
|
||||
'pt'
|
||||
];
|
||||
|
||||
export const UNKNOWN_KEY = 'UNKNOWN';
|
||||
|
@ -5,7 +5,7 @@ import { getDate, getMonth, getYear, parse, subDays } from 'date-fns';
|
||||
import { de, es, fr, it, nl, pt } from 'date-fns/locale';
|
||||
|
||||
import { ghostfolioScraperApiSymbolPrefix, locale } from './config';
|
||||
import { Benchmark } from './interfaces';
|
||||
import { Benchmark, UniqueAsset } from './interfaces';
|
||||
import { ColorScheme } from './types';
|
||||
|
||||
const NUMERIC_REGEXP = /[-]{0,1}[\d]*[.,]{0,1}[\d]+/g;
|
||||
@ -64,6 +64,10 @@ export function extractNumberFromString(aString: string): number {
|
||||
}
|
||||
}
|
||||
|
||||
export function getAssetProfileIdentifier({ dataSource, symbol }: UniqueAsset) {
|
||||
return `${dataSource}-${symbol}`;
|
||||
}
|
||||
|
||||
export function getBackgroundColor(aColorScheme: ColorScheme) {
|
||||
return getCssVariable(
|
||||
aColorScheme === 'DARK' ||
|
||||
@ -230,6 +234,16 @@ export function isCurrency(aSymbol = '') {
|
||||
return currencies[aSymbol];
|
||||
}
|
||||
|
||||
export function interpolate(template: string, context: any) {
|
||||
return template?.replace(/[$]{([^}]+)}/g, (_, objectPath) => {
|
||||
const properties = objectPath.split('.');
|
||||
return properties.reduce(
|
||||
(previous, current) => previous?.[current],
|
||||
context
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
export function resetHours(aDate: Date) {
|
||||
const year = getYear(aDate);
|
||||
const month = getMonth(aDate);
|
||||
|
@ -7,7 +7,9 @@ import { Sector } from './sector.interface';
|
||||
export interface PortfolioPosition {
|
||||
allocationInPercentage: number;
|
||||
assetClass?: AssetClass;
|
||||
assetClassLabel?: string;
|
||||
assetSubClass?: AssetSubClass | 'CASH';
|
||||
assetSubClassLabel?: string;
|
||||
countries: Country[];
|
||||
currency: string;
|
||||
dataSource: DataSource;
|
||||
|
@ -4,4 +4,5 @@ export type MarketAdvanced =
|
||||
| 'europe'
|
||||
| 'japan'
|
||||
| 'northAmerica'
|
||||
| 'otherMarkets';
|
||||
| 'otherMarkets'
|
||||
| 'UNKNOWN';
|
||||
|
@ -1 +1,4 @@
|
||||
export type MarketDataPreset = 'ETF_WITHOUT_COUNTRIES' | 'ETF_WITHOUT_SECTORS';
|
||||
export type MarketDataPreset =
|
||||
| 'CURRENCIES'
|
||||
| 'ETF_WITHOUT_COUNTRIES'
|
||||
| 'ETF_WITHOUT_SECTORS';
|
||||
|
@ -1 +1,5 @@
|
||||
export type Market = 'developedMarkets' | 'emergingMarkets' | 'otherMarkets';
|
||||
export type Market =
|
||||
| 'developedMarkets'
|
||||
| 'emergingMarkets'
|
||||
| 'otherMarkets'
|
||||
| 'UNKNOWN';
|
||||
|
@ -383,13 +383,14 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy, OnInit {
|
||||
}
|
||||
|
||||
private getTotalValue() {
|
||||
let totalValue = new Big(0);
|
||||
const paginatedData = this.getPaginatedData();
|
||||
for (const activity of paginatedData) {
|
||||
if (isNumber(activity.valueInBaseCurrency)) {
|
||||
if (activity.type === 'BUY' || activity.type === 'ITEM') {
|
||||
totalValue = totalValue.plus(activity.valueInBaseCurrency);
|
||||
} else if (activity.type === 'SELL') {
|
||||
let totalValue = new Big(0);
|
||||
|
||||
for (const { type, valueInBaseCurrency } of paginatedData) {
|
||||
if (isNumber(valueInBaseCurrency)) {
|
||||
if (type === 'BUY' || type === 'ITEM') {
|
||||
totalValue = totalValue.plus(valueInBaseCurrency);
|
||||
} else if (type === 'LIABILITY' || type === 'SELL') {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
|
@ -28,8 +28,11 @@
|
||||
<ng-container i18n>Name</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="line-height-1 px-1" mat-cell>
|
||||
<div *ngIf="element.name !== element.symbol" class="text-truncate">
|
||||
<div class="text-truncate">
|
||||
{{ element.name }}
|
||||
<span *ngIf="element.name === element.symbol"
|
||||
>({{ element.assetSubClassLabel }})</span
|
||||
>
|
||||
</div>
|
||||
<div>
|
||||
<small class="text-muted">{{ element.symbol }}</small>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user