Compare commits
62 Commits
Author | SHA1 | Date | |
---|---|---|---|
de31381fd9 | |||
0d92b8d8bb | |||
7c6ff776d9 | |||
e37a34ed6c | |||
c4d9c00f92 | |||
3af8be89e3 | |||
0f1db71604 | |||
fce9e7fb0c | |||
6301c0c21c | |||
30bb484d5a | |||
f88ee5e5a0 | |||
73b5030972 | |||
a69a3442ab | |||
d4dff744b5 | |||
62c93ad99d | |||
1e42d6bffa | |||
002ac29f2f | |||
20ccf389e9 | |||
a2f99ed4d2 | |||
cc6320acfd | |||
261a0fb0b9 | |||
cfc05cce41 | |||
1f15b70134 | |||
a5b49b286d | |||
f3333f24da | |||
cad8f0d0e2 | |||
edd3e75730 | |||
ab68c2c69a | |||
cbb95f21a3 | |||
74d3954335 | |||
92449b0369 | |||
65276483e0 | |||
dde0d1e465 | |||
3ad802c6f5 | |||
b81377a682 | |||
545180b88f | |||
a9819b9e25 | |||
897e941e7a | |||
aef840c2cc | |||
80d0638922 | |||
494ba36d44 | |||
dab9154092 | |||
cd4a85abbf | |||
e7977a9fbb | |||
684c1e55b0 | |||
1ffa831c5c | |||
40eed0016c | |||
b58631083b | |||
e0c0425d21 | |||
bf2de5d572 | |||
2b4a1dc480 | |||
ce022c024f | |||
0f4bf529d8 | |||
dad6bf7095 | |||
86ca9eaae6 | |||
9d9b805b0e | |||
851401be1e | |||
85052bc9bc | |||
bff09f529d | |||
f438458687 | |||
7125b12631 | |||
0cbf275a2e |
2
.github/workflows/build-code.yml
vendored
2
.github/workflows/build-code.yml
vendored
@ -10,7 +10,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
node_version:
|
||||
- 18
|
||||
- 16
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
2
.github/workflows/docker-image.yml
vendored
2
.github/workflows/docker-image.yml
vendored
@ -41,7 +41,7 @@ jobs:
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.output.labels }}
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -25,6 +25,7 @@
|
||||
|
||||
# misc
|
||||
/.angular/cache
|
||||
.env
|
||||
.env.prod
|
||||
/.sass-cache
|
||||
/connect.lock
|
||||
@ -38,4 +39,4 @@ yarn-error.log
|
||||
|
||||
# System Files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
Thumbs.db
|
||||
|
@ -1,10 +1,7 @@
|
||||
module.exports = {
|
||||
stories: [],
|
||||
addons: ['@storybook/addon-essentials']
|
||||
// uncomment the property below if you want to apply some webpack config globally
|
||||
// webpackFinal: async (config, { configType }) => {
|
||||
// // Make whatever fine-grained changes you need that should apply to all storybook configs
|
||||
|
||||
// // Return the altered config
|
||||
// return config;
|
||||
// },
|
||||
|
140
CHANGELOG.md
140
CHANGELOG.md
@ -5,6 +5,140 @@ 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.245.0 - 2023-03-12
|
||||
|
||||
### Added
|
||||
|
||||
- Added the search functionality for the `EOD_HISTORICAL_DATA` data source type
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the usability of the _FIRE_ calculator
|
||||
- Improved the exchange rate service for a specific date used in activities with a manual currency
|
||||
- Upgraded `ngx-device-detector` from version `3.0.0` to `5.0.1`
|
||||
|
||||
## 1.244.0 - 2023-03-09
|
||||
|
||||
### Added
|
||||
|
||||
- Extended the _FIRE_ calculator by a retirement date setting
|
||||
|
||||
## 1.243.0 - 2023-03-08
|
||||
|
||||
### Added
|
||||
|
||||
- Added `COINGECKO` as a default to `DATA_SOURCES`
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the validation of the manual currency for the activity fee and unit price
|
||||
- Harmonized the axis style of charts
|
||||
- Made setting `NODE_ENV: production` optional (to avoid `ENOENT: no such file or directory` errors on startup)
|
||||
- Removed the environment variable `ENABLE_FEATURE_CUSTOM_SYMBOLS`
|
||||
|
||||
## 1.242.0 - 2023-03-04
|
||||
|
||||
### Changed
|
||||
|
||||
- Simplified the database seeding
|
||||
- Upgraded `ngx-skeleton-loader` from version `5.0.0` to `7.0.0`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Downgraded `Node.js` from version `18` to `16` (Dockerfile) to resolve `SIGSEGV` (segmentation fault) during the `prisma` database migrations (see https://github.com/prisma/prisma/issues/10649)
|
||||
|
||||
## 1.241.0 - 2023-03-01
|
||||
|
||||
### Changed
|
||||
|
||||
- Filtered activities with type `ITEM` from search results
|
||||
- Considered the user's language in the _Stripe_ checkout
|
||||
- Upgraded the _Stripe_ dependencies
|
||||
- Upgraded `twitter-api-v2` from version `1.10.3` to `1.14.2`
|
||||
|
||||
## 1.240.0 - 2023-02-26
|
||||
|
||||
### Added
|
||||
|
||||
- Supported a manual currency for the activity unit price
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the feature graphic of the _Ghostfolio meets Umbrel_ blog post
|
||||
|
||||
## 1.239.0 - 2023-02-25
|
||||
|
||||
### Added
|
||||
|
||||
- Added a blog post: _Ghostfolio meets Umbrel_
|
||||
|
||||
### Changed
|
||||
|
||||
- Removed the dependency `rimraf`
|
||||
|
||||
## 1.238.0 - 2023-02-25
|
||||
|
||||
### Added
|
||||
|
||||
- Added `COINGECKO` as a new data source type
|
||||
- Added support for data provider information to the position detail dialog
|
||||
- Added the configuration to publish a `linux/arm/v7` docker image
|
||||
- Added _Reddit_ to the _As seen in_ section on the landing page
|
||||
- Added _Umbrel_ to the _As seen in_ section on the landing page
|
||||
|
||||
### Changed
|
||||
|
||||
- Renamed the example environment variable file from `.env` to `.env.example`
|
||||
- Upgraded `zone.js` from version `0.11.8` to `0.12.0`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed `RangeError: Maximum call stack size exceeded` for values of type `Big` in the value redaction interceptor for the impersonation mode
|
||||
- Reset the letter spacing in buttons
|
||||
|
||||
### Todo
|
||||
|
||||
- Ensure that you still have a `.env` file in your project
|
||||
|
||||
## 1.237.0 - 2023-02-19
|
||||
|
||||
### Added
|
||||
|
||||
- Added the support details to the pricing page
|
||||
|
||||
### Changed
|
||||
|
||||
- Increased the file size limit for the activities import
|
||||
- Improved the style of the search results for symbols
|
||||
- Migrated the style of `GfHeaderModule` to `@angular/material` `15` (mdc)
|
||||
- Upgraded `angular` from version `15.1.2` to `15.1.5`
|
||||
- Upgraded `Nx` from version `15.6.3` to `15.7.2`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed an issue with exact matches in the activities table filter (`VT` vs. `VTI`)
|
||||
- Fixed an issue in the data gathering service (do not skip `MANUAL` data source)
|
||||
|
||||
## 1.236.0 - 2023-02-17
|
||||
|
||||
### Changed
|
||||
|
||||
- Beautified the ETF names in the asset profile
|
||||
- Removed the data source type `GHOSTFOLIO`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed an issue in the data gathering service (do not skip `MANUAL` data source)
|
||||
- Fixed the buying power calculation if no emergency fund is set but an activity is tagged as _Emergency Fund_
|
||||
- Fixed the url on logout during the local development
|
||||
|
||||
## 1.235.0 - 2023-02-16
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the styles on the about page
|
||||
- Eliminated the `GhostfolioScraperApiService`
|
||||
|
||||
## 1.234.0 - 2023-02-15
|
||||
|
||||
### Added
|
||||
@ -718,7 +852,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
- Added the alias to the `Access` database schema
|
||||
- Added support for translated time distances
|
||||
- Added a _GitHub Action_ to create an `arm64` docker image
|
||||
- Added a _GitHub Action_ to create an `linux/arm64` docker image
|
||||
|
||||
### Changed
|
||||
|
||||
@ -1331,7 +1465,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Beautified the ETF names in the symbol profile
|
||||
- Beautified the ETF names in the asset profile
|
||||
|
||||
### Fixed
|
||||
|
||||
@ -1756,7 +1890,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Changed
|
||||
|
||||
- Extended the historical data view in the admin control panel
|
||||
- Upgraded _Stripe_ dependencies
|
||||
- Upgraded the _Stripe_ dependencies
|
||||
- Upgraded `prisma` from version `3.7.0` to `3.8.1`
|
||||
|
||||
### Fixed
|
||||
|
25
DEVELOPMENT.md
Normal file
25
DEVELOPMENT.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Ghostfolio Development Guide
|
||||
|
||||
## Git
|
||||
|
||||
### Rebase
|
||||
|
||||
`git rebase -i --autosquash main`
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Nx
|
||||
|
||||
#### Upgrade
|
||||
|
||||
1. Run `yarn nx migrate latest`
|
||||
1. Make sure `package.json` changes make sense and then run `yarn install`
|
||||
1. Run `yarn nx migrate --run-migrations`
|
||||
|
||||
### Prisma
|
||||
|
||||
#### Create schema migration (local)
|
||||
|
||||
Run `yarn prisma migrate dev --name added_job_title`
|
||||
|
||||
https://www.prisma.io/docs/concepts/components/prisma-migrate#getting-started-with-prisma-migrate
|
@ -1,4 +1,4 @@
|
||||
FROM --platform=$BUILDPLATFORM node:18-slim as builder
|
||||
FROM --platform=$BUILDPLATFORM node:16-slim as builder
|
||||
|
||||
# Build application and add additional files
|
||||
WORKDIR /ghostfolio
|
||||
@ -50,7 +50,7 @@ COPY package.json /ghostfolio/dist/apps/api
|
||||
RUN yarn database:generate-typings
|
||||
|
||||
# Image to run, copy everything needed from builder
|
||||
FROM node:18-slim
|
||||
FROM node:16-slim
|
||||
RUN apt update && apt install -y \
|
||||
openssl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
47
README.md
47
README.md
@ -75,7 +75,7 @@ The frontend is built with [Angular](https://angular.io) and uses [Angular Mater
|
||||
|
||||
## Self-hosting
|
||||
|
||||
We provide official container images hosted on [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio) for `linux/amd64` and `linux/arm64`.
|
||||
We provide official container images hosted on [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio) for `linux/amd64`, `linux/arm/v7` and `linux/arm64`.
|
||||
|
||||
<div align="center">
|
||||
|
||||
@ -85,20 +85,19 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c
|
||||
|
||||
### Supported Environment Variables
|
||||
|
||||
| Name | Default Value | Description |
|
||||
| ------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `ACCESS_TOKEN_SALT` | | A random string used as salt for access tokens |
|
||||
| `BASE_CURRENCY` | `USD` | The base currency of the Ghostfolio application.<br />`AUD` \| `CAD` \| `CNY` \| `EUR` \| `GBP` \| `JPY` \| `RUB` \| `USD`<br />Caution: Only set if you intend to track cryptocurrencies in a non-`USD` currency. This cannot be changed later! |
|
||||
| `DATABASE_URL` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` |
|
||||
| `HOST` | `0.0.0.0` | The host where the Ghostfolio application will run on |
|
||||
| `JWT_SECRET_KEY` | | A random string used for _JSON Web Tokens_ (JWT) |
|
||||
| `PORT` | `3333` | The port where the Ghostfolio application will run on |
|
||||
| `POSTGRES_DB` | | The name of the _PostgreSQL_ database |
|
||||
| `POSTGRES_PASSWORD` | | The password of the _PostgreSQL_ database |
|
||||
| `POSTGRES_USER` | | The user of the _PostgreSQL_ database |
|
||||
| `REDIS_HOST` | | The host where _Redis_ is running |
|
||||
| `REDIS_PASSWORD` | | The password of _Redis_ |
|
||||
| `REDIS_PORT` | | The port where _Redis_ is running |
|
||||
| Name | Default Value | Description |
|
||||
| ------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `ACCESS_TOKEN_SALT` | | A random string used as salt for access tokens |
|
||||
| `DATABASE_URL` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` |
|
||||
| `HOST` | `0.0.0.0` | The host where the Ghostfolio application will run on |
|
||||
| `JWT_SECRET_KEY` | | A random string used for _JSON Web Tokens_ (JWT) |
|
||||
| `PORT` | `3333` | The port where the Ghostfolio application will run on |
|
||||
| `POSTGRES_DB` | | The name of the _PostgreSQL_ database |
|
||||
| `POSTGRES_PASSWORD` | | The password of the _PostgreSQL_ database |
|
||||
| `POSTGRES_USER` | | The user of the _PostgreSQL_ database |
|
||||
| `REDIS_HOST` | | The host where _Redis_ is running |
|
||||
| `REDIS_PASSWORD` | | The password of _Redis_ |
|
||||
| `REDIS_PORT` | | The port where _Redis_ is running |
|
||||
|
||||
### Run with Docker Compose
|
||||
|
||||
@ -106,7 +105,8 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c
|
||||
|
||||
- Basic knowledge of Docker
|
||||
- Installation of [Docker](https://www.docker.com/products/docker-desktop)
|
||||
- Local copy of this Git repository (clone)
|
||||
- Create a local copy of this Git repository (clone)
|
||||
- Copy the file `.env.example` to `.env` and populate it with your data (`cp .env.example .env`)
|
||||
|
||||
#### a. Run environment
|
||||
|
||||
@ -125,13 +125,10 @@ docker-compose --env-file ./.env -f docker/docker-compose.build.yml build
|
||||
docker-compose --env-file ./.env -f docker/docker-compose.build.yml up -d
|
||||
```
|
||||
|
||||
#### Fetch Historical Data
|
||||
|
||||
Open http://localhost:3333 in your browser and accomplish these steps:
|
||||
#### Setup
|
||||
|
||||
1. Open http://localhost:3333 in your browser
|
||||
1. Create a new user via _Get Started_ (this first user will get the role `ADMIN`)
|
||||
1. Go to the _Market Data_ tab in the _Admin Control Panel_ and click _Gather All Data_ to fetch historical data
|
||||
1. Click _Sign out_ and check out the _Live Demo_
|
||||
|
||||
#### Upgrade Version
|
||||
|
||||
@ -150,18 +147,18 @@ Please follow the instructions of the Ghostfolio [Unraid Community App](https://
|
||||
- [Docker](https://www.docker.com/products/docker-desktop)
|
||||
- [Node.js](https://nodejs.org/en/download) (version 16)
|
||||
- [Yarn](https://yarnpkg.com/en/docs/install)
|
||||
- A local copy of this Git repository (clone)
|
||||
- Create a local copy of this Git repository (clone)
|
||||
- Copy the file `.env.example` to `.env` and populate it with your data (`cp .env.example .env`)
|
||||
|
||||
### 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 and populate your database with (example) data
|
||||
1. Run `yarn database:setup` to initialize the database schema
|
||||
1. Start the server and the client (see [_Development_](#Development))
|
||||
1. Open http://localhost:4200/en in your browser
|
||||
1. Create a new user via _Get Started_ (this first user will get the role `ADMIN`)
|
||||
1. Go to the _Market Data_ tab in the _Admin Control Panel_ and click _Gather All Data_ to fetch historical data
|
||||
1. Click _Sign out_ and check out the _Live Demo_
|
||||
|
||||
### Start Server
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
|
||||
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response.interceptor';
|
||||
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import { Accounts } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import type {
|
||||
@ -83,7 +84,7 @@ export class AccountController {
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
public async getAllAccounts(
|
||||
@Headers('impersonation-id') impersonationId
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId
|
||||
): Promise<Accounts> {
|
||||
const impersonationUserId =
|
||||
await this.impersonationService.validateImpersonationId(
|
||||
@ -101,7 +102,7 @@ export class AccountController {
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
public async getAccountById(
|
||||
@Headers('impersonation-id') impersonationId,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
|
||||
@Param('id') id: string
|
||||
): Promise<AccountWithValue> {
|
||||
const impersonationUserId =
|
||||
|
@ -231,12 +231,27 @@ export class AdminService {
|
||||
}
|
||||
|
||||
private async getUsersWithAnalytics(): Promise<AdminData['users']> {
|
||||
const usersWithAnalytics = await this.prismaService.user.findMany({
|
||||
orderBy: {
|
||||
let orderBy: any = {
|
||||
createdAt: 'desc'
|
||||
};
|
||||
let where;
|
||||
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
orderBy = {
|
||||
Analytics: {
|
||||
updatedAt: 'desc'
|
||||
}
|
||||
},
|
||||
};
|
||||
where = {
|
||||
NOT: {
|
||||
Analytics: null
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const usersWithAnalytics = await this.prismaService.user.findMany({
|
||||
orderBy,
|
||||
where,
|
||||
select: {
|
||||
_count: {
|
||||
select: { Account: true, Order: true }
|
||||
@ -252,19 +267,16 @@ export class AdminService {
|
||||
id: true,
|
||||
Subscription: true
|
||||
},
|
||||
take: 30,
|
||||
where: {
|
||||
NOT: {
|
||||
Analytics: null
|
||||
}
|
||||
}
|
||||
take: 30
|
||||
});
|
||||
|
||||
return usersWithAnalytics.map(
|
||||
({ _count, Analytics, createdAt, id, Subscription }) => {
|
||||
const daysSinceRegistration =
|
||||
differenceInDays(new Date(), createdAt) + 1;
|
||||
const engagement = Analytics.activityCount / daysSinceRegistration;
|
||||
const engagement = Analytics
|
||||
? Analytics.activityCount / daysSinceRegistration
|
||||
: undefined;
|
||||
|
||||
const subscription = this.configurationService.get(
|
||||
'ENABLE_FEATURE_SUBSCRIPTION'
|
||||
@ -278,8 +290,8 @@ export class AdminService {
|
||||
id,
|
||||
subscription,
|
||||
accountCount: _count.Account || 0,
|
||||
country: Analytics.country,
|
||||
lastActivity: Analytics.updatedAt,
|
||||
country: Analytics?.country,
|
||||
lastActivity: Analytics?.updatedAt,
|
||||
transactionCount: _count.Order || 0
|
||||
};
|
||||
}
|
||||
|
@ -1,33 +1,46 @@
|
||||
import { UserService } from '@ghostfolio/api/app/user/user.service';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
||||
import { HEADER_KEY_TIMEZONE } from '@ghostfolio/common/config';
|
||||
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
||||
import { PassportStrategy } from '@nestjs/passport';
|
||||
import * as countriesAndTimezones from 'countries-and-timezones';
|
||||
import { ExtractJwt, Strategy } from 'passport-jwt';
|
||||
|
||||
@Injectable()
|
||||
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
|
||||
public constructor(
|
||||
readonly configurationService: ConfigurationService,
|
||||
private readonly configurationService: ConfigurationService,
|
||||
private readonly prismaService: PrismaService,
|
||||
private readonly userService: UserService
|
||||
) {
|
||||
super({
|
||||
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||
passReqToCallback: true,
|
||||
secretOrKey: configurationService.get('JWT_SECRET_KEY')
|
||||
});
|
||||
}
|
||||
|
||||
public async validate({ id }: { id: string }) {
|
||||
public async validate(request: Request, { id }: { id: string }) {
|
||||
try {
|
||||
const timezone = request.headers[HEADER_KEY_TIMEZONE.toLowerCase()];
|
||||
const user = await this.userService.user({ id });
|
||||
|
||||
if (user) {
|
||||
await this.prismaService.analytics.upsert({
|
||||
create: { User: { connect: { id: user.id } } },
|
||||
update: { activityCount: { increment: 1 }, updatedAt: new Date() },
|
||||
where: { userId: user.id }
|
||||
});
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
const country =
|
||||
countriesAndTimezones.getCountryForTimezone(timezone)?.id;
|
||||
|
||||
await this.prismaService.analytics.upsert({
|
||||
create: { country, User: { connect: { id: user.id } } },
|
||||
update: {
|
||||
country,
|
||||
activityCount: { increment: 1 },
|
||||
updatedAt: new Date()
|
||||
},
|
||||
where: { userId: user.id }
|
||||
});
|
||||
}
|
||||
|
||||
return user;
|
||||
} else {
|
||||
|
@ -1,6 +1,13 @@
|
||||
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { Controller, Get, Param, UseGuards } from '@nestjs/common';
|
||||
import {
|
||||
Controller,
|
||||
Get,
|
||||
HttpException,
|
||||
Param,
|
||||
UseGuards
|
||||
} from '@nestjs/common';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
|
||||
import { ExchangeRateService } from './exchange-rate.service';
|
||||
|
||||
@ -18,9 +25,18 @@ export class ExchangeRateController {
|
||||
): Promise<IDataProviderHistoricalResponse> {
|
||||
const date = new Date(dateString);
|
||||
|
||||
return this.exchangeRateService.getExchangeRate({
|
||||
const exchangeRate = await this.exchangeRateService.getExchangeRate({
|
||||
date,
|
||||
symbol
|
||||
});
|
||||
|
||||
if (exchangeRate) {
|
||||
return { marketPrice: exchangeRate };
|
||||
}
|
||||
|
||||
throw new HttpException(
|
||||
getReasonPhrase(StatusCodes.NOT_FOUND),
|
||||
StatusCodes.NOT_FOUND
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
|
||||
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
@ -14,16 +13,14 @@ export class ExchangeRateService {
|
||||
}: {
|
||||
date: Date;
|
||||
symbol: string;
|
||||
}): Promise<IDataProviderHistoricalResponse> {
|
||||
}): Promise<number> {
|
||||
const [currency1, currency2] = symbol.split('-');
|
||||
|
||||
const marketPrice = await this.exchangeRateDataService.toCurrencyAtDate(
|
||||
return this.exchangeRateDataService.toCurrencyAtDate(
|
||||
1,
|
||||
currency1,
|
||||
currency2,
|
||||
date
|
||||
);
|
||||
|
||||
return { marketPrice };
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import { environment } from '@ghostfolio/api/environments/environment';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config';
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||
import { Injectable, NestMiddleware } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { format } from 'date-fns';
|
||||
import { NextFunction, Request, Response } from 'express';
|
||||
|
||||
@ -18,18 +18,10 @@ export class FrontendMiddleware implements NestMiddleware {
|
||||
public indexHtmlIt = '';
|
||||
public indexHtmlNl = '';
|
||||
public indexHtmlPt = '';
|
||||
public isProduction: boolean;
|
||||
|
||||
public constructor(
|
||||
private readonly configService: ConfigService,
|
||||
private readonly configurationService: ConfigurationService
|
||||
) {
|
||||
const NODE_ENV =
|
||||
this.configService.get<'development' | 'production'>('NODE_ENV') ??
|
||||
'development';
|
||||
|
||||
this.isProduction = NODE_ENV === 'production';
|
||||
|
||||
try {
|
||||
this.indexHtmlDe = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('de'),
|
||||
@ -90,12 +82,17 @@ export class FrontendMiddleware implements NestMiddleware {
|
||||
) {
|
||||
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}`;
|
||||
}
|
||||
|
||||
if (
|
||||
request.path.startsWith('/api/') ||
|
||||
this.isFileRequest(request.url) ||
|
||||
!this.isProduction
|
||||
!environment.production
|
||||
) {
|
||||
// Skip
|
||||
next();
|
||||
|
@ -6,8 +6,8 @@ import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
||||
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
|
||||
import {
|
||||
DEMO_USER_ID,
|
||||
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
|
||||
PROPERTY_DEMO_USER_ID,
|
||||
PROPERTY_IS_READ_ONLY_MODE,
|
||||
PROPERTY_SLACK_COMMUNITY_USERS,
|
||||
PROPERTY_STRIPE_CONFIG,
|
||||
@ -59,9 +59,7 @@ export class InfoService {
|
||||
}
|
||||
|
||||
if (this.configurationService.get('ENABLE_FEATURE_FEAR_AND_GREED_INDEX')) {
|
||||
if (
|
||||
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true
|
||||
) {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
info.fearAndGreedDataSource = encodeDataSource(
|
||||
ghostfolioFearAndGreedIndexDataSource
|
||||
);
|
||||
@ -120,7 +118,7 @@ export class InfoService {
|
||||
baseCurrency: this.configurationService.get('BASE_CURRENCY'),
|
||||
benchmarks: await this.benchmarkService.getBenchmarkAssetProfiles(),
|
||||
currencies: this.exchangeRateDataService.getCurrencies(),
|
||||
demoAuthToken: this.getDemoAuthToken(),
|
||||
demoAuthToken: await this.getDemoAuthToken(),
|
||||
statistics: await this.getStatistics(),
|
||||
subscriptions: await this.getSubscriptions(),
|
||||
tags: await this.tagService.get()
|
||||
@ -248,10 +246,18 @@ export class InfoService {
|
||||
)) as string;
|
||||
}
|
||||
|
||||
private getDemoAuthToken() {
|
||||
return this.jwtService.sign({
|
||||
id: DEMO_USER_ID
|
||||
});
|
||||
private async getDemoAuthToken() {
|
||||
const demoUserId = (await this.propertyService.getByKey(
|
||||
PROPERTY_DEMO_USER_ID
|
||||
)) as string;
|
||||
|
||||
if (demoUserId) {
|
||||
return this.jwtService.sign({
|
||||
id: demoUserId
|
||||
});
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private async getStatistics() {
|
||||
|
@ -3,6 +3,7 @@ import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interce
|
||||
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor';
|
||||
import { ApiService } from '@ghostfolio/api/services/api/api.service';
|
||||
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import type { RequestWithUser } from '@ghostfolio/common/types';
|
||||
import {
|
||||
@ -66,7 +67,7 @@ export class OrderController {
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
public async getAllOrders(
|
||||
@Headers('impersonation-id') impersonationId,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('tags') filterByTags?: string
|
||||
|
@ -110,9 +110,6 @@ export class OrderService {
|
||||
dataSource,
|
||||
symbol: id
|
||||
};
|
||||
} else {
|
||||
data.SymbolProfile.connectOrCreate.create.symbol =
|
||||
data.SymbolProfile.connectOrCreate.create.symbol.toUpperCase();
|
||||
}
|
||||
|
||||
await this.dataGatheringService.addJobToQueue(
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { parseDate, resetHours } from '@ghostfolio/common/helper';
|
||||
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
|
||||
import { addDays, endOfDay, isBefore, isSameDay } from 'date-fns';
|
||||
|
||||
import { GetValueObject } from './interfaces/get-value-object.interface';
|
||||
@ -48,8 +49,11 @@ export const CurrentRateServiceMock = {
|
||||
getValues: ({
|
||||
dataGatheringItems,
|
||||
dateQuery
|
||||
}: GetValuesParams): Promise<GetValueObject[]> => {
|
||||
const result: GetValueObject[] = [];
|
||||
}: GetValuesParams): Promise<{
|
||||
dataProviderInfos: DataProviderInfo[];
|
||||
values: GetValueObject[];
|
||||
}> => {
|
||||
const values: GetValueObject[] = [];
|
||||
if (dateQuery.lt) {
|
||||
for (
|
||||
let date = resetHours(dateQuery.gte);
|
||||
@ -57,7 +61,7 @@ export const CurrentRateServiceMock = {
|
||||
date = addDays(date, 1)
|
||||
) {
|
||||
for (const dataGatheringItem of dataGatheringItems) {
|
||||
result.push({
|
||||
values.push({
|
||||
date,
|
||||
marketPriceInBaseCurrency: mockGetValue(
|
||||
dataGatheringItem.symbol,
|
||||
@ -70,7 +74,7 @@ export const CurrentRateServiceMock = {
|
||||
} else {
|
||||
for (const date of dateQuery.in) {
|
||||
for (const dataGatheringItem of dataGatheringItems) {
|
||||
result.push({
|
||||
values.push({
|
||||
date,
|
||||
marketPriceInBaseCurrency: mockGetValue(
|
||||
dataGatheringItem.symbol,
|
||||
@ -81,6 +85,6 @@ export const CurrentRateServiceMock = {
|
||||
}
|
||||
}
|
||||
}
|
||||
return Promise.resolve(result);
|
||||
return Promise.resolve({ values, dataProviderInfos: [] });
|
||||
}
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
|
||||
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
|
||||
import { MarketDataService } from '@ghostfolio/api/services/market-data.service';
|
||||
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
|
||||
import { DataSource, MarketData } from '@prisma/client';
|
||||
|
||||
import { CurrentRateService } from './current-rate.service';
|
||||
@ -103,17 +104,23 @@ describe('CurrentRateService', () => {
|
||||
},
|
||||
userCurrency: 'CHF'
|
||||
})
|
||||
).toMatchObject<GetValueObject[]>([
|
||||
{
|
||||
date: undefined,
|
||||
marketPriceInBaseCurrency: 1841.823902,
|
||||
symbol: 'AMZN'
|
||||
},
|
||||
{
|
||||
date: undefined,
|
||||
marketPriceInBaseCurrency: 1847.839966,
|
||||
symbol: 'AMZN'
|
||||
}
|
||||
]);
|
||||
).toMatchObject<{
|
||||
dataProviderInfos: DataProviderInfo[];
|
||||
values: GetValueObject[];
|
||||
}>({
|
||||
dataProviderInfos: [],
|
||||
values: [
|
||||
{
|
||||
date: undefined,
|
||||
marketPriceInBaseCurrency: 1841.823902,
|
||||
symbol: 'AMZN'
|
||||
},
|
||||
{
|
||||
date: undefined,
|
||||
marketPriceInBaseCurrency: 1847.839966,
|
||||
symbol: 'AMZN'
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -2,6 +2,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
|
||||
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
|
||||
import { MarketDataService } from '@ghostfolio/api/services/market-data.service';
|
||||
import { resetHours } from '@ghostfolio/common/helper';
|
||||
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { isBefore, isToday } from 'date-fns';
|
||||
import { flatten } from 'lodash';
|
||||
@ -22,7 +23,11 @@ export class CurrentRateService {
|
||||
dataGatheringItems,
|
||||
dateQuery,
|
||||
userCurrency
|
||||
}: GetValuesParams): Promise<GetValueObject[]> {
|
||||
}: GetValuesParams): Promise<{
|
||||
dataProviderInfos: DataProviderInfo[];
|
||||
values: GetValueObject[];
|
||||
}> {
|
||||
const dataProviderInfos: DataProviderInfo[] = [];
|
||||
const includeToday =
|
||||
(!dateQuery.lt || isBefore(new Date(), dateQuery.lt)) &&
|
||||
(!dateQuery.gte || isBefore(dateQuery.gte, new Date())) &&
|
||||
@ -38,6 +43,14 @@ export class CurrentRateService {
|
||||
.then((dataResultProvider) => {
|
||||
const result: GetValueObject[] = [];
|
||||
for (const dataGatheringItem of dataGatheringItems) {
|
||||
if (
|
||||
dataResultProvider?.[dataGatheringItem.symbol]?.dataProviderInfo
|
||||
) {
|
||||
dataProviderInfos.push(
|
||||
dataResultProvider[dataGatheringItem.symbol].dataProviderInfo
|
||||
);
|
||||
}
|
||||
|
||||
result.push({
|
||||
date: today,
|
||||
marketPriceInBaseCurrency:
|
||||
@ -81,7 +94,10 @@ export class CurrentRateService {
|
||||
})
|
||||
);
|
||||
|
||||
return flatten(await Promise.all(promises));
|
||||
return {
|
||||
dataProviderInfos,
|
||||
values: flatten(await Promise.all(promises))
|
||||
};
|
||||
}
|
||||
|
||||
private containsToday(dates: Date[]): boolean {
|
||||
|
@ -1,4 +1,5 @@
|
||||
import {
|
||||
DataProviderInfo,
|
||||
EnhancedSymbolProfile,
|
||||
HistoricalDataItem
|
||||
} from '@ghostfolio/common/interfaces';
|
||||
@ -7,6 +8,7 @@ import { Tag } from '@prisma/client';
|
||||
|
||||
export interface PortfolioPositionDetail {
|
||||
averagePrice: number;
|
||||
dataProviderInfo: DataProviderInfo;
|
||||
dividendInBaseCurrency: number;
|
||||
feeInBaseCurrency: number;
|
||||
firstBuyDate: string;
|
||||
|
@ -1,7 +1,11 @@
|
||||
import { TimelineInfoInterface } from '@ghostfolio/api/app/portfolio/interfaces/timeline-info.interface';
|
||||
import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { DATE_FORMAT, parseDate, resetHours } from '@ghostfolio/common/helper';
|
||||
import { ResponseError, TimelinePosition } from '@ghostfolio/common/interfaces';
|
||||
import {
|
||||
DataProviderInfo,
|
||||
ResponseError,
|
||||
TimelinePosition
|
||||
} from '@ghostfolio/common/interfaces';
|
||||
import { GroupBy } from '@ghostfolio/common/types';
|
||||
import { Logger } from '@nestjs/common';
|
||||
import { Type as TypeOfOrder } from '@prisma/client';
|
||||
@ -45,6 +49,7 @@ export class PortfolioCalculator {
|
||||
|
||||
private currency: string;
|
||||
private currentRateService: CurrentRateService;
|
||||
private dataProviderInfos: DataProviderInfo[];
|
||||
private orders: PortfolioOrder[];
|
||||
private transactionPoints: TransactionPoint[];
|
||||
|
||||
@ -202,14 +207,17 @@ export class PortfolioCalculator {
|
||||
symbols[item.symbol] = true;
|
||||
}
|
||||
|
||||
const marketSymbols = await this.currentRateService.getValues({
|
||||
currencies,
|
||||
dataGatheringItems,
|
||||
dateQuery: {
|
||||
in: dates
|
||||
},
|
||||
userCurrency: this.currency
|
||||
});
|
||||
const { dataProviderInfos, values: marketSymbols } =
|
||||
await this.currentRateService.getValues({
|
||||
currencies,
|
||||
dataGatheringItems,
|
||||
dateQuery: {
|
||||
in: dates
|
||||
},
|
||||
userCurrency: this.currency
|
||||
});
|
||||
|
||||
this.dataProviderInfos = dataProviderInfos;
|
||||
|
||||
const marketSymbolMap: {
|
||||
[date: string]: { [symbol: string]: Big };
|
||||
@ -368,14 +376,17 @@ export class PortfolioCalculator {
|
||||
|
||||
dates.push(resetHours(end));
|
||||
|
||||
const marketSymbols = await this.currentRateService.getValues({
|
||||
currencies,
|
||||
dataGatheringItems,
|
||||
dateQuery: {
|
||||
in: dates
|
||||
},
|
||||
userCurrency: this.currency
|
||||
});
|
||||
const { dataProviderInfos, values: marketSymbols } =
|
||||
await this.currentRateService.getValues({
|
||||
currencies,
|
||||
dataGatheringItems,
|
||||
dateQuery: {
|
||||
in: dates
|
||||
},
|
||||
userCurrency: this.currency
|
||||
});
|
||||
|
||||
this.dataProviderInfos = dataProviderInfos;
|
||||
|
||||
const marketSymbolMap: {
|
||||
[date: string]: { [symbol: string]: Big };
|
||||
@ -463,6 +474,10 @@ export class PortfolioCalculator {
|
||||
};
|
||||
}
|
||||
|
||||
public getDataProviderInfos() {
|
||||
return this.dataProviderInfos;
|
||||
}
|
||||
|
||||
public getInvestments(): { date: string; investment: Big }[] {
|
||||
if (this.transactionPoints.length === 0) {
|
||||
return [];
|
||||
@ -748,7 +763,7 @@ export class PortfolioCalculator {
|
||||
let marketSymbols: GetValueObject[] = [];
|
||||
if (dataGatheringItems.length > 0) {
|
||||
try {
|
||||
marketSymbols = await this.currentRateService.getValues({
|
||||
const { values } = await this.currentRateService.getValues({
|
||||
currencies,
|
||||
dataGatheringItems,
|
||||
dateQuery: {
|
||||
@ -757,6 +772,7 @@ export class PortfolioCalculator {
|
||||
},
|
||||
userCurrency: this.currency
|
||||
});
|
||||
marketSymbols = values;
|
||||
} catch (error) {
|
||||
Logger.error(
|
||||
`Failed to fetch info for date ${startDate} with exception`,
|
||||
|
@ -10,6 +10,7 @@ import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interc
|
||||
import { ApiService } from '@ghostfolio/api/services/api/api.service';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import {
|
||||
PortfolioDetails,
|
||||
PortfolioDividends,
|
||||
@ -65,7 +66,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
public async getDetails(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('range') dateRange: DateRange = 'max',
|
||||
@ -189,7 +190,7 @@ export class PortfolioController {
|
||||
@Get('dividends')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getDividends(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('groupBy') groupBy?: GroupBy,
|
||||
@ -239,7 +240,7 @@ export class PortfolioController {
|
||||
@Get('investments')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getInvestments(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('groupBy') groupBy?: GroupBy,
|
||||
@ -291,7 +292,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
@Version('2')
|
||||
public async getPerformanceV2(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('range') dateRange: DateRange = 'max',
|
||||
@ -360,7 +361,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
public async getPositions(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('range') dateRange: DateRange = 'max',
|
||||
@ -451,7 +452,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getPosition(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Param('dataSource') dataSource,
|
||||
@Param('symbol') symbol
|
||||
): Promise<PortfolioPositionDetail> {
|
||||
@ -474,7 +475,7 @@ export class PortfolioController {
|
||||
@Get('report')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getReport(
|
||||
@Headers('impersonation-id') impersonationId: string
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
|
||||
): Promise<PortfolioReport> {
|
||||
const report = await this.portfolioService.getReport(impersonationId);
|
||||
|
||||
|
@ -678,6 +678,7 @@ export class PortfolioService {
|
||||
return {
|
||||
tags,
|
||||
averagePrice: undefined,
|
||||
dataProviderInfo: undefined,
|
||||
dividendInBaseCurrency: undefined,
|
||||
feeInBaseCurrency: undefined,
|
||||
firstBuyDate: undefined,
|
||||
@ -849,6 +850,7 @@ export class PortfolioService {
|
||||
tags,
|
||||
transactionCount,
|
||||
averagePrice: averagePrice.toNumber(),
|
||||
dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0],
|
||||
dividendInBaseCurrency: dividendInBaseCurrency.toNumber(),
|
||||
feeInBaseCurrency: this.exchangeRateDataService.toCurrency(
|
||||
fee.toNumber(),
|
||||
@ -911,6 +913,7 @@ export class PortfolioService {
|
||||
SymbolProfile,
|
||||
tags,
|
||||
averagePrice: 0,
|
||||
dataProviderInfo: undefined,
|
||||
dividendInBaseCurrency: 0,
|
||||
feeInBaseCurrency: 0,
|
||||
firstBuyDate: undefined,
|
||||
@ -1550,7 +1553,10 @@ export class PortfolioService {
|
||||
userCurrency
|
||||
}).toNumber();
|
||||
const emergencyFund = new Big(
|
||||
(user.Settings?.settings as UserSettings)?.emergencyFund ?? 0
|
||||
Math.max(
|
||||
emergencyFundPositionsValueInBaseCurrency,
|
||||
(user.Settings?.settings as UserSettings)?.emergencyFund ?? 0
|
||||
)
|
||||
);
|
||||
const fees = this.getFees({ activities, userCurrency }).toNumber();
|
||||
const firstOrderDate = activities[0]?.date;
|
||||
|
@ -117,7 +117,7 @@ export class SubscriptionController {
|
||||
return await this.subscriptionService.createCheckoutSession({
|
||||
couponId,
|
||||
priceId,
|
||||
userId: this.request.user.id
|
||||
user: this.request.user
|
||||
});
|
||||
} catch (error) {
|
||||
Logger.error(error, 'SubscriptionController');
|
||||
|
@ -4,6 +4,7 @@ import {
|
||||
DEFAULT_LANGUAGE_CODE,
|
||||
PROPERTY_STRIPE_CONFIG
|
||||
} from '@ghostfolio/common/config';
|
||||
import { UserWithSettings } from '@ghostfolio/common/interfaces';
|
||||
import { Subscription as SubscriptionInterface } from '@ghostfolio/common/interfaces/subscription.interface';
|
||||
import { SubscriptionType } from '@ghostfolio/common/types/subscription.type';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
@ -23,7 +24,7 @@ export class SubscriptionService {
|
||||
this.stripe = new Stripe(
|
||||
this.configurationService.get('STRIPE_SECRET_KEY'),
|
||||
{
|
||||
apiVersion: '2020-08-27'
|
||||
apiVersion: '2022-11-15'
|
||||
}
|
||||
);
|
||||
}
|
||||
@ -31,17 +32,17 @@ export class SubscriptionService {
|
||||
public async createCheckoutSession({
|
||||
couponId,
|
||||
priceId,
|
||||
userId
|
||||
user
|
||||
}: {
|
||||
couponId?: string;
|
||||
priceId: string;
|
||||
userId: string;
|
||||
user: UserWithSettings;
|
||||
}) {
|
||||
const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = {
|
||||
cancel_url: `${this.configurationService.get(
|
||||
'ROOT_URL'
|
||||
)}/${DEFAULT_LANGUAGE_CODE}/account`,
|
||||
client_reference_id: userId,
|
||||
cancel_url: `${this.configurationService.get('ROOT_URL')}/${
|
||||
user.Settings?.settings?.language ?? DEFAULT_LANGUAGE_CODE
|
||||
}/account`,
|
||||
client_reference_id: user.id,
|
||||
line_items: [
|
||||
{
|
||||
price: priceId,
|
||||
@ -116,10 +117,6 @@ export class SubscriptionService {
|
||||
userId: session.client_reference_id
|
||||
});
|
||||
|
||||
await this.stripe.customers.update(session.customer as string, {
|
||||
description: session.client_reference_id
|
||||
});
|
||||
|
||||
return session.client_reference_id;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'SubscriptionService');
|
||||
|
@ -1,7 +0,0 @@
|
||||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
||||
export class CreateUserDto {
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
country?: string;
|
||||
}
|
@ -6,12 +6,17 @@ import type {
|
||||
import {
|
||||
IsBoolean,
|
||||
IsIn,
|
||||
IsISO8601,
|
||||
IsNumber,
|
||||
IsOptional,
|
||||
IsString
|
||||
} from 'class-validator';
|
||||
|
||||
export class UpdateUserSettingDto {
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
annualInterestRate?: number;
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
baseCurrency?: string;
|
||||
@ -48,6 +53,14 @@ export class UpdateUserSettingDto {
|
||||
@IsOptional()
|
||||
locale?: string;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
projectedTotalAmount?: number;
|
||||
|
||||
@IsISO8601()
|
||||
@IsOptional()
|
||||
retirementDate?: string;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
savingsRate?: number;
|
||||
|
@ -22,7 +22,6 @@ import { User as UserModel } from '@prisma/client';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
import { size } from 'lodash';
|
||||
|
||||
import { CreateUserDto } from './create-user.dto';
|
||||
import { UserItem } from './interfaces/user-item.interface';
|
||||
import { UpdateUserSettingDto } from './update-user-setting.dto';
|
||||
import { UserService } from './user.service';
|
||||
@ -66,7 +65,7 @@ export class UserController {
|
||||
}
|
||||
|
||||
@Post()
|
||||
public async signupUser(@Body() data: CreateUserDto): Promise<UserItem> {
|
||||
public async signupUser(): Promise<UserItem> {
|
||||
const isUserSignupEnabled =
|
||||
await this.propertyService.isUserSignupEnabled();
|
||||
|
||||
@ -80,7 +79,6 @@ export class UserController {
|
||||
const hasAdmin = await this.userService.hasAdmin();
|
||||
|
||||
const { accessToken, id, role } = await this.userService.createUser({
|
||||
country: data.country,
|
||||
data: { role: hasAdmin ? 'USER' : 'ADMIN' }
|
||||
});
|
||||
|
||||
|
@ -18,8 +18,6 @@ import { Injectable } from '@nestjs/common';
|
||||
import { Prisma, Role, User } from '@prisma/client';
|
||||
import { sortBy } from 'lodash';
|
||||
|
||||
import { CreateUserDto } from './create-user.dto';
|
||||
|
||||
const crypto = require('crypto');
|
||||
|
||||
@Injectable()
|
||||
@ -234,9 +232,10 @@ export class UserService {
|
||||
}
|
||||
|
||||
public async createUser({
|
||||
country,
|
||||
data
|
||||
}: CreateUserDto & { data: Prisma.UserCreateInput }): Promise<User> {
|
||||
}: {
|
||||
data: Prisma.UserCreateInput;
|
||||
}): Promise<User> {
|
||||
if (!data?.provider) {
|
||||
data.provider = 'ANONYMOUS';
|
||||
}
|
||||
@ -264,7 +263,6 @@ export class UserService {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
await this.prismaService.analytics.create({
|
||||
data: {
|
||||
country,
|
||||
User: { connect: { id: user.id } }
|
||||
}
|
||||
});
|
||||
|
@ -1,3 +1,4 @@
|
||||
import Big from 'big.js';
|
||||
import { cloneDeep, isArray, isObject } from 'lodash';
|
||||
|
||||
export function hasNotDefinedValuesInObject(aObject: Object): boolean {
|
||||
@ -59,7 +60,10 @@ export function redactAttributes({
|
||||
return redactAttributes({ options, object: currentObject });
|
||||
}
|
||||
);
|
||||
} else if (isObject(redactedObject[property])) {
|
||||
} else if (
|
||||
isObject(redactedObject[property]) &&
|
||||
!(redactedObject[property] instanceof Big)
|
||||
) {
|
||||
// Recursively call the function on the nested object
|
||||
redactedObject[property] = redactAttributes({
|
||||
options,
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { UserService } from '@ghostfolio/api/app/user/user.service';
|
||||
import { redactAttributes } from '@ghostfolio/api/helper/object.helper';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import {
|
||||
CallHandler,
|
||||
ExecutionContext,
|
||||
@ -22,7 +23,8 @@ export class RedactValuesInResponseInterceptor<T>
|
||||
return next.handle().pipe(
|
||||
map((data: any) => {
|
||||
const request = context.switchToHttp().getRequest();
|
||||
const hasImpersonationId = !!request.headers?.['impersonation-id'];
|
||||
const hasImpersonationId =
|
||||
!!request.headers?.[HEADER_KEY_IMPERSONATION.toLowerCase()];
|
||||
|
||||
if (
|
||||
hasImpersonationId ||
|
||||
|
@ -24,7 +24,7 @@ export class TransformDataSourceInRequestInterceptor<T>
|
||||
const http = context.switchToHttp();
|
||||
const request = http.getRequest();
|
||||
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true) {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
if (request.body.dataSource) {
|
||||
request.body.dataSource = decodeDataSource(request.body.dataSource);
|
||||
}
|
||||
|
@ -26,9 +26,7 @@ export class TransformDataSourceInResponseInterceptor<T>
|
||||
): Observable<any> {
|
||||
return next.handle().pipe(
|
||||
map((data: any) => {
|
||||
if (
|
||||
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true
|
||||
) {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
data = redactAttributes({
|
||||
options: [
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { Logger, ValidationPipe, VersioningType } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
import * as bodyParser from 'body-parser';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
@ -9,15 +10,10 @@ async function bootstrap() {
|
||||
const configApp = await NestFactory.create(AppModule);
|
||||
const configService = configApp.get<ConfigService>(ConfigService);
|
||||
|
||||
const NODE_ENV =
|
||||
configService.get<'development' | 'production'>('NODE_ENV') ??
|
||||
'development';
|
||||
|
||||
const app = await NestFactory.create(AppModule, {
|
||||
logger:
|
||||
NODE_ENV === 'production'
|
||||
? ['error', 'log', 'warn']
|
||||
: ['debug', 'error', 'log', 'verbose', 'warn']
|
||||
logger: environment.production
|
||||
? ['error', 'log', 'warn']
|
||||
: ['debug', 'error', 'log', 'verbose', 'warn']
|
||||
});
|
||||
app.enableCors();
|
||||
app.enableVersioning({
|
||||
@ -33,6 +29,9 @@ async function bootstrap() {
|
||||
})
|
||||
);
|
||||
|
||||
// Support 10mb csv/json files for importing activities
|
||||
app.use(bodyParser.json({ limit: '10mb' }));
|
||||
|
||||
const HOST = configService.get<string>('HOST') || '0.0.0.0';
|
||||
const PORT = configService.get<number>('PORT') || 3333;
|
||||
await app.listen(PORT, HOST, () => {
|
||||
|
@ -19,10 +19,9 @@ export class ConfigurationService {
|
||||
CACHE_TTL: num({ default: 1 }),
|
||||
DATA_SOURCE_PRIMARY: str({ default: DataSource.YAHOO }),
|
||||
DATA_SOURCES: json({
|
||||
default: [DataSource.GHOSTFOLIO, DataSource.MANUAL, DataSource.YAHOO]
|
||||
default: [DataSource.COINGECKO, DataSource.MANUAL, DataSource.YAHOO]
|
||||
}),
|
||||
ENABLE_FEATURE_BLOG: bool({ default: false }),
|
||||
ENABLE_FEATURE_CUSTOM_SYMBOLS: bool({ default: false }),
|
||||
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }),
|
||||
ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }),
|
||||
ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }),
|
||||
|
@ -207,10 +207,6 @@ export class DataGatheringService {
|
||||
|
||||
public async gatherSymbols(aSymbolsWithStartDate: IDataGatheringItem[]) {
|
||||
for (const { dataSource, date, symbol } of aSymbolsWithStartDate) {
|
||||
if (dataSource === 'MANUAL') {
|
||||
continue;
|
||||
}
|
||||
|
||||
await this.addJobToQueue(
|
||||
GATHER_HISTORICAL_MARKET_DATA_PROCESS,
|
||||
{
|
||||
@ -253,11 +249,6 @@ export class DataGatheringService {
|
||||
},
|
||||
scraperConfiguration: true,
|
||||
symbol: true
|
||||
},
|
||||
where: {
|
||||
dataSource: {
|
||||
not: 'MANUAL'
|
||||
}
|
||||
}
|
||||
})
|
||||
).map((symbolProfile) => {
|
||||
@ -278,7 +269,6 @@ export class DataGatheringService {
|
||||
return symbolProfiles
|
||||
.filter(({ dataSource }) => {
|
||||
return (
|
||||
dataSource !== DataSource.GHOSTFOLIO &&
|
||||
dataSource !== DataSource.MANUAL &&
|
||||
dataSource !== DataSource.RAPID_API
|
||||
);
|
||||
@ -300,11 +290,6 @@ export class DataGatheringService {
|
||||
dataSource: true,
|
||||
scraperConfiguration: true,
|
||||
symbol: true
|
||||
},
|
||||
where: {
|
||||
dataSource: {
|
||||
not: 'MANUAL'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -0,0 +1,196 @@
|
||||
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
|
||||
import {
|
||||
IDataProviderHistoricalResponse,
|
||||
IDataProviderResponse
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import {
|
||||
AssetClass,
|
||||
AssetSubClass,
|
||||
DataSource,
|
||||
SymbolProfile
|
||||
} from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import { format, fromUnixTime, getUnixTime } from 'date-fns';
|
||||
|
||||
@Injectable()
|
||||
export class CoinGeckoService implements DataProviderInterface {
|
||||
private baseCurrency: string;
|
||||
private readonly URL = 'https://api.coingecko.com/api/v3';
|
||||
|
||||
public constructor(
|
||||
private readonly configurationService: ConfigurationService
|
||||
) {
|
||||
this.baseCurrency = this.configurationService.get('BASE_CURRENCY');
|
||||
}
|
||||
|
||||
public canHandle(symbol: string) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public async getAssetProfile(
|
||||
aSymbol: string
|
||||
): Promise<Partial<SymbolProfile>> {
|
||||
const response: Partial<SymbolProfile> = {
|
||||
assetClass: AssetClass.CASH,
|
||||
assetSubClass: AssetSubClass.CRYPTOCURRENCY,
|
||||
currency: this.baseCurrency,
|
||||
dataSource: this.getName(),
|
||||
symbol: aSymbol
|
||||
};
|
||||
|
||||
try {
|
||||
const get = bent(`${this.URL}/coins/${aSymbol}`, 'GET', 'json', 200);
|
||||
const { name } = await get();
|
||||
|
||||
response.name = name;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'CoinGeckoService');
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async getDividends({
|
||||
from,
|
||||
granularity = 'day',
|
||||
symbol,
|
||||
to
|
||||
}: {
|
||||
from: Date;
|
||||
granularity: Granularity;
|
||||
symbol: string;
|
||||
to: Date;
|
||||
}) {
|
||||
return {};
|
||||
}
|
||||
|
||||
public async getHistorical(
|
||||
aSymbol: string,
|
||||
aGranularity: Granularity = 'day',
|
||||
from: Date,
|
||||
to: Date
|
||||
): Promise<{
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
}> {
|
||||
try {
|
||||
const get = bent(
|
||||
`${
|
||||
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();
|
||||
|
||||
const result: {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
} = {
|
||||
[aSymbol]: {}
|
||||
};
|
||||
|
||||
for (const [timestamp, marketPrice] of prices) {
|
||||
result[aSymbol][format(fromUnixTime(timestamp / 1000), DATE_FORMAT)] = {
|
||||
marketPrice
|
||||
};
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
throw new Error(
|
||||
`Could not get historical market data for ${aSymbol} (${this.getName()}) from ${format(
|
||||
from,
|
||||
DATE_FORMAT
|
||||
)} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public getMaxNumberOfSymbolsPerRequest() {
|
||||
return 50;
|
||||
}
|
||||
|
||||
public getName(): DataSource {
|
||||
return DataSource.COINGECKO;
|
||||
}
|
||||
|
||||
public async getQuotes(
|
||||
aSymbols: string[]
|
||||
): Promise<{ [symbol: string]: IDataProviderResponse }> {
|
||||
const results: { [symbol: string]: IDataProviderResponse } = {};
|
||||
|
||||
if (aSymbols.length <= 0) {
|
||||
return {};
|
||||
}
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/simple/price?ids=${aSymbols.join(
|
||||
','
|
||||
)}&vs_currencies=${this.baseCurrency.toLowerCase()}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const response = await get();
|
||||
|
||||
for (const symbol in response) {
|
||||
if (Object.prototype.hasOwnProperty.call(response, symbol)) {
|
||||
results[symbol] = {
|
||||
currency: this.baseCurrency,
|
||||
dataProviderInfo: this.getDataProviderInfo(),
|
||||
dataSource: DataSource.COINGECKO,
|
||||
marketPrice: response[symbol][this.baseCurrency.toLowerCase()],
|
||||
marketState: 'open'
|
||||
};
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
Logger.error(error, 'CoinGeckoService');
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
let items: LookupItem[] = [];
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/search?query=${aQuery}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const { coins } = await get();
|
||||
|
||||
items = coins.map(({ id: symbol, name }) => {
|
||||
return {
|
||||
name,
|
||||
symbol,
|
||||
currency: this.baseCurrency,
|
||||
dataSource: this.getName()
|
||||
};
|
||||
});
|
||||
} catch (error) {
|
||||
Logger.error(error, 'CoinGeckoService');
|
||||
}
|
||||
|
||||
return { items };
|
||||
}
|
||||
|
||||
private getDataProviderInfo(): DataProviderInfo {
|
||||
return {
|
||||
name: 'CoinGecko',
|
||||
url: 'https://coingecko.com'
|
||||
};
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
import { ConfigurationModule } from '@ghostfolio/api/services/configuration.module';
|
||||
import { CryptocurrencyModule } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.module';
|
||||
import { AlphaVantageService } from '@ghostfolio/api/services/data-provider/alpha-vantage/alpha-vantage.service';
|
||||
import { CoinGeckoService } from '@ghostfolio/api/services/data-provider/coingecko/coingecko.service';
|
||||
import { EodHistoricalDataService } from '@ghostfolio/api/services/data-provider/eod-historical-data/eod-historical-data.service';
|
||||
import { GhostfolioScraperApiService } from '@ghostfolio/api/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service';
|
||||
import { GoogleSheetsService } from '@ghostfolio/api/services/data-provider/google-sheets/google-sheets.service';
|
||||
import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
|
||||
import { RapidApiService } from '@ghostfolio/api/services/data-provider/rapid-api/rapid-api.service';
|
||||
@ -22,9 +22,9 @@ import { DataProviderService } from './data-provider.service';
|
||||
],
|
||||
providers: [
|
||||
AlphaVantageService,
|
||||
CoinGeckoService,
|
||||
DataProviderService,
|
||||
EodHistoricalDataService,
|
||||
GhostfolioScraperApiService,
|
||||
GoogleSheetsService,
|
||||
ManualService,
|
||||
RapidApiService,
|
||||
@ -32,8 +32,8 @@ import { DataProviderService } from './data-provider.service';
|
||||
{
|
||||
inject: [
|
||||
AlphaVantageService,
|
||||
CoinGeckoService,
|
||||
EodHistoricalDataService,
|
||||
GhostfolioScraperApiService,
|
||||
GoogleSheetsService,
|
||||
ManualService,
|
||||
RapidApiService,
|
||||
@ -42,16 +42,16 @@ import { DataProviderService } from './data-provider.service';
|
||||
provide: 'DataProviderInterfaces',
|
||||
useFactory: (
|
||||
alphaVantageService,
|
||||
coinGeckoService,
|
||||
eodHistoricalDataService,
|
||||
ghostfolioScraperApiService,
|
||||
googleSheetsService,
|
||||
manualService,
|
||||
rapidApiService,
|
||||
yahooFinanceService
|
||||
) => [
|
||||
alphaVantageService,
|
||||
coinGeckoService,
|
||||
eodHistoricalDataService,
|
||||
ghostfolioScraperApiService,
|
||||
googleSheetsService,
|
||||
manualService,
|
||||
rapidApiService,
|
||||
@ -59,10 +59,6 @@ import { DataProviderService } from './data-provider.service';
|
||||
]
|
||||
}
|
||||
],
|
||||
exports: [
|
||||
DataProviderService,
|
||||
GhostfolioScraperApiService,
|
||||
YahooFinanceService
|
||||
]
|
||||
exports: [DataProviderService, YahooFinanceService]
|
||||
})
|
||||
export class DataProviderModule {}
|
||||
|
@ -264,6 +264,10 @@ export class DataProviderService {
|
||||
const promises: Promise<{ items: LookupItem[] }>[] = [];
|
||||
let lookupItems: LookupItem[] = [];
|
||||
|
||||
if (aQuery?.length < 2) {
|
||||
return { items: lookupItems };
|
||||
}
|
||||
|
||||
for (const dataSource of this.configurationService.get('DATA_SOURCES')) {
|
||||
promises.push(
|
||||
this.getDataProvider(DataSource[dataSource]).search(aQuery)
|
||||
@ -272,14 +276,20 @@ export class DataProviderService {
|
||||
|
||||
const searchResults = await Promise.all(promises);
|
||||
|
||||
searchResults.forEach((searchResult) => {
|
||||
lookupItems = lookupItems.concat(searchResult.items);
|
||||
searchResults.forEach(({ items }) => {
|
||||
if (items?.length > 0) {
|
||||
lookupItems = lookupItems.concat(items);
|
||||
}
|
||||
});
|
||||
|
||||
const filteredItems = lookupItems.filter((lookupItem) => {
|
||||
// Only allow symbols with supported currency
|
||||
return lookupItem.currency ? true : false;
|
||||
});
|
||||
const filteredItems = lookupItems
|
||||
.filter((lookupItem) => {
|
||||
// Only allow symbols with supported currency
|
||||
return lookupItem.currency ? true : false;
|
||||
})
|
||||
.sort(({ name: name1 }, { name: name2 }) => {
|
||||
return name1?.toLowerCase().localeCompare(name2?.toLowerCase());
|
||||
});
|
||||
|
||||
return {
|
||||
items: filteredItems
|
||||
|
@ -5,13 +5,12 @@ import {
|
||||
IDataProviderHistoricalResponse,
|
||||
IDataProviderResponse
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
|
||||
import { DATE_FORMAT } 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 { format, isToday } from 'date-fns';
|
||||
|
||||
@Injectable()
|
||||
export class EodHistoricalDataService implements DataProviderInterface {
|
||||
@ -19,8 +18,7 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
private readonly URL = 'https://eodhistoricaldata.com/api';
|
||||
|
||||
public constructor(
|
||||
private readonly configurationService: ConfigurationService,
|
||||
private readonly symbolProfileService: SymbolProfileService
|
||||
private readonly configurationService: ConfigurationService
|
||||
) {
|
||||
this.apiKey = this.configurationService.get('EOD_HISTORICAL_DATA_API_KEY');
|
||||
}
|
||||
@ -32,8 +30,12 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
public async getAssetProfile(
|
||||
aSymbol: string
|
||||
): Promise<Partial<SymbolProfile>> {
|
||||
const { items } = await this.search(aSymbol);
|
||||
|
||||
return {
|
||||
dataSource: this.getName()
|
||||
currency: items[0]?.currency,
|
||||
dataSource: this.getName(),
|
||||
name: items[0]?.name
|
||||
};
|
||||
}
|
||||
|
||||
@ -122,32 +124,30 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
200
|
||||
);
|
||||
|
||||
const [response, symbolProfiles] = await Promise.all([
|
||||
const [realTimeResponse, searchResponse] = await Promise.all([
|
||||
get(),
|
||||
this.symbolProfileService.getSymbolProfiles(
|
||||
aSymbols.map((symbol) => {
|
||||
return {
|
||||
symbol,
|
||||
dataSource: DataSource.EOD_HISTORICAL_DATA
|
||||
};
|
||||
})
|
||||
)
|
||||
this.search(aSymbols[0])
|
||||
]);
|
||||
|
||||
const quotes = aSymbols.length === 1 ? [response] : response;
|
||||
const quotes =
|
||||
aSymbols.length === 1 ? [realTimeResponse] : realTimeResponse;
|
||||
|
||||
return quotes.reduce((result, item, index, array) => {
|
||||
result[item.code] = {
|
||||
currency: symbolProfiles.find((symbolProfile) => {
|
||||
return symbolProfile.symbol === item.code;
|
||||
})?.currency,
|
||||
dataSource: DataSource.EOD_HISTORICAL_DATA,
|
||||
marketPrice: item.close,
|
||||
marketState: 'delayed'
|
||||
};
|
||||
return quotes.reduce(
|
||||
(
|
||||
result: { [symbol: string]: IDataProviderResponse },
|
||||
{ close, code, timestamp }
|
||||
) => {
|
||||
result[code] = {
|
||||
currency: searchResponse?.items[0]?.currency,
|
||||
dataSource: DataSource.EOD_HISTORICAL_DATA,
|
||||
marketPrice: close,
|
||||
marketState: isToday(new Date(timestamp * 1000)) ? 'open' : 'closed'
|
||||
};
|
||||
|
||||
return result;
|
||||
}, {});
|
||||
return result;
|
||||
},
|
||||
{}
|
||||
);
|
||||
} catch (error) {
|
||||
Logger.error(error, 'EodHistoricalDataService');
|
||||
}
|
||||
@ -156,6 +156,31 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
return { items: [] };
|
||||
let items: LookupItem[] = [];
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/search/${aQuery}?api_token=${this.apiKey}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const response = await get();
|
||||
|
||||
items = response.map(
|
||||
({ Code, Currency: currency, Exchange, Name: name }) => {
|
||||
return {
|
||||
currency,
|
||||
name,
|
||||
dataSource: this.getName(),
|
||||
symbol: `${Code}.${Exchange}`
|
||||
};
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
Logger.error(error, 'EodHistoricalDataService');
|
||||
}
|
||||
|
||||
return { items };
|
||||
}
|
||||
}
|
||||
|
@ -1,194 +0,0 @@
|
||||
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
|
||||
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
|
||||
import {
|
||||
IDataProviderHistoricalResponse,
|
||||
IDataProviderResponse
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
||||
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
|
||||
import {
|
||||
DATE_FORMAT,
|
||||
extractNumberFromString,
|
||||
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 * as cheerio from 'cheerio';
|
||||
import { addDays, format, isBefore } from 'date-fns';
|
||||
|
||||
@Injectable()
|
||||
export class GhostfolioScraperApiService implements DataProviderInterface {
|
||||
public constructor(
|
||||
private readonly prismaService: PrismaService,
|
||||
private readonly symbolProfileService: SymbolProfileService
|
||||
) {}
|
||||
|
||||
public canHandle(symbol: string) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public async getAssetProfile(
|
||||
aSymbol: string
|
||||
): Promise<Partial<SymbolProfile>> {
|
||||
return {
|
||||
dataSource: this.getName()
|
||||
};
|
||||
}
|
||||
|
||||
public async getDividends({
|
||||
from,
|
||||
granularity = 'day',
|
||||
symbol,
|
||||
to
|
||||
}: {
|
||||
from: Date;
|
||||
granularity: Granularity;
|
||||
symbol: string;
|
||||
to: Date;
|
||||
}) {
|
||||
return {};
|
||||
}
|
||||
|
||||
public async getHistorical(
|
||||
aSymbol: string,
|
||||
aGranularity: Granularity = 'day',
|
||||
from: Date,
|
||||
to: Date
|
||||
): Promise<{
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
}> {
|
||||
try {
|
||||
const symbol = aSymbol;
|
||||
|
||||
const [symbolProfile] =
|
||||
await this.symbolProfileService.getSymbolProfilesBySymbols([symbol]);
|
||||
const { defaultMarketPrice, selector, url } =
|
||||
symbolProfile.scraperConfiguration ?? {};
|
||||
|
||||
if (defaultMarketPrice) {
|
||||
const historical: {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
} = {
|
||||
[symbol]: {}
|
||||
};
|
||||
let date = from;
|
||||
|
||||
while (isBefore(date, to)) {
|
||||
historical[symbol][format(date, DATE_FORMAT)] = {
|
||||
marketPrice: defaultMarketPrice
|
||||
};
|
||||
|
||||
date = addDays(date, 1);
|
||||
}
|
||||
|
||||
return historical;
|
||||
} else if (selector === undefined || url === undefined) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const get = bent(url, 'GET', 'string', 200, {});
|
||||
|
||||
const html = await get();
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
const value = extractNumberFromString($(selector).text());
|
||||
|
||||
return {
|
||||
[symbol]: {
|
||||
[format(getYesterday(), DATE_FORMAT)]: {
|
||||
marketPrice: value
|
||||
}
|
||||
}
|
||||
};
|
||||
} catch (error) {
|
||||
throw new Error(
|
||||
`Could not get historical market data for ${aSymbol} (${this.getName()}) from ${format(
|
||||
from,
|
||||
DATE_FORMAT
|
||||
)} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public getName(): DataSource {
|
||||
return DataSource.GHOSTFOLIO;
|
||||
}
|
||||
|
||||
public async getQuotes(
|
||||
aSymbols: string[]
|
||||
): Promise<{ [symbol: string]: IDataProviderResponse }> {
|
||||
const response: { [symbol: string]: IDataProviderResponse } = {};
|
||||
|
||||
if (aSymbols.length <= 0) {
|
||||
return response;
|
||||
}
|
||||
|
||||
try {
|
||||
const symbolProfiles =
|
||||
await this.symbolProfileService.getSymbolProfilesBySymbols(aSymbols);
|
||||
|
||||
const marketData = await this.prismaService.marketData.findMany({
|
||||
distinct: ['symbol'],
|
||||
orderBy: {
|
||||
date: 'desc'
|
||||
},
|
||||
take: aSymbols.length,
|
||||
where: {
|
||||
symbol: {
|
||||
in: aSymbols
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for (const symbolProfile of symbolProfiles) {
|
||||
response[symbolProfile.symbol] = {
|
||||
currency: symbolProfile.currency,
|
||||
dataSource: this.getName(),
|
||||
marketPrice: marketData.find((marketDataItem) => {
|
||||
return marketDataItem.symbol === symbolProfile.symbol;
|
||||
})?.marketPrice,
|
||||
marketState: 'delayed'
|
||||
};
|
||||
}
|
||||
|
||||
return response;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'GhostfolioScraperApiService');
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
const items = await this.prismaService.symbolProfile.findMany({
|
||||
select: {
|
||||
currency: true,
|
||||
dataSource: true,
|
||||
name: true,
|
||||
symbol: true
|
||||
},
|
||||
where: {
|
||||
OR: [
|
||||
{
|
||||
dataSource: this.getName(),
|
||||
name: {
|
||||
mode: 'insensitive',
|
||||
startsWith: aQuery
|
||||
}
|
||||
},
|
||||
{
|
||||
dataSource: this.getName(),
|
||||
symbol: {
|
||||
mode: 'insensitive',
|
||||
startsWith: aQuery
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
return { items };
|
||||
}
|
||||
}
|
@ -16,6 +16,7 @@ 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';
|
||||
|
||||
@Injectable()
|
||||
@ -162,7 +163,7 @@ export class ManualService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
const items = await this.prismaService.symbolProfile.findMany({
|
||||
let items = await this.prismaService.symbolProfile.findMany({
|
||||
select: {
|
||||
currency: true,
|
||||
dataSource: true,
|
||||
@ -189,6 +190,11 @@ export class ManualService implements DataProviderInterface {
|
||||
}
|
||||
});
|
||||
|
||||
items = items.filter(({ symbol }) => {
|
||||
// Remove UUID symbols (activities of type ITEM)
|
||||
return !isUUID(symbol);
|
||||
});
|
||||
|
||||
return { items };
|
||||
}
|
||||
}
|
||||
|
@ -441,8 +441,10 @@ export class YahooFinanceService implements DataProviderInterface {
|
||||
let name = longName;
|
||||
|
||||
if (name) {
|
||||
name = name.replace('Amundi Index Solutions - ', '');
|
||||
name = name.replace('iShares ETF (CH) - ', '');
|
||||
name = name.replace('iShares III Public Limited Company - ', '');
|
||||
name = name.replace('iShares V PLC - ', '');
|
||||
name = name.replace('iShares VI Public Limited Company - ', '');
|
||||
name = name.replace('iShares VII PLC - ', '');
|
||||
name = name.replace('Multi Units Luxembourg - ', '');
|
||||
|
@ -168,7 +168,7 @@ export class ExchangeRateDataService {
|
||||
return this.toCurrency(aValue, aFromCurrency, aToCurrency);
|
||||
}
|
||||
|
||||
let factor = 1;
|
||||
let factor: number;
|
||||
|
||||
if (aFromCurrency !== aToCurrency) {
|
||||
const dataSource = this.dataProviderService.getPrimaryDataSource();
|
||||
@ -183,9 +183,29 @@ export class ExchangeRateDataService {
|
||||
if (marketData?.marketPrice) {
|
||||
factor = marketData?.marketPrice;
|
||||
} else {
|
||||
// TODO: Get from data provider service or calculate indirectly via base currency
|
||||
// and market data
|
||||
return this.toCurrency(aValue, aFromCurrency, aToCurrency);
|
||||
// Calculate indirectly via base currency
|
||||
try {
|
||||
const [
|
||||
{ marketPrice: marketPriceBaseCurrencyFromCurrency },
|
||||
{ marketPrice: marketPriceBaseCurrencyToCurrency }
|
||||
] = await Promise.all([
|
||||
this.marketDataService.get({
|
||||
dataSource,
|
||||
date: aDate,
|
||||
symbol: `${this.baseCurrency}${aFromCurrency}`
|
||||
}),
|
||||
this.marketDataService.get({
|
||||
dataSource,
|
||||
date: aDate,
|
||||
symbol: `${this.baseCurrency}${aToCurrency}`
|
||||
})
|
||||
]);
|
||||
|
||||
// Calculate the opposite direction
|
||||
factor =
|
||||
(1 / marketPriceBaseCurrencyFromCurrency) *
|
||||
marketPriceBaseCurrencyToCurrency;
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,12 +213,15 @@ export class ExchangeRateDataService {
|
||||
return factor * aValue;
|
||||
}
|
||||
|
||||
// Fallback with error, if currencies are not available
|
||||
Logger.error(
|
||||
`No exchange rate has been found for ${aFromCurrency}${aToCurrency}`,
|
||||
`No exchange rate has been found for ${aFromCurrency}${aToCurrency} at ${format(
|
||||
aDate,
|
||||
DATE_FORMAT
|
||||
)}`,
|
||||
'ExchangeRateDataService'
|
||||
);
|
||||
return aValue;
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private async prepareCurrencies(): Promise<string[]> {
|
||||
|
@ -8,7 +8,6 @@ export interface Environment extends CleanedEnvAccessors {
|
||||
DATA_SOURCE_PRIMARY: string;
|
||||
DATA_SOURCES: string[];
|
||||
ENABLE_FEATURE_BLOG: boolean;
|
||||
ENABLE_FEATURE_CUSTOM_SYMBOLS: boolean;
|
||||
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean;
|
||||
ENABLE_FEATURE_READ_ONLY_MODE: boolean;
|
||||
ENABLE_FEATURE_SOCIAL_LOGIN: boolean;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import { DataProviderInfo, UniqueAsset } from '@ghostfolio/common/interfaces';
|
||||
import { MarketState } from '@ghostfolio/common/types';
|
||||
import {
|
||||
Account,
|
||||
@ -28,6 +28,7 @@ export interface IDataProviderHistoricalResponse {
|
||||
|
||||
export interface IDataProviderResponse {
|
||||
currency: string;
|
||||
dataProviderInfo?: DataProviderInfo;
|
||||
dataSource: DataSource;
|
||||
marketPrice: number;
|
||||
marketState: MarketState;
|
||||
|
@ -123,6 +123,13 @@ const routes: Routes = [
|
||||
'./pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.module'
|
||||
).then((m) => m.GhostfolioAufSackgeldVorgestelltPageModule)
|
||||
},
|
||||
{
|
||||
path: 'blog/2023/02/ghostfolio-meets-umbrel',
|
||||
loadChildren: () =>
|
||||
import(
|
||||
'./pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module'
|
||||
).then((m) => m.GhostfolioMeetsUmbrelPageModule)
|
||||
},
|
||||
{
|
||||
path: 'demo',
|
||||
loadChildren: () =>
|
||||
|
@ -104,7 +104,7 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||
this.tokenStorageService.signOut();
|
||||
this.userService.remove();
|
||||
|
||||
document.location.href = '/';
|
||||
document.location.href = `/${document.documentElement.lang}`;
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
|
@ -1,6 +1,7 @@
|
||||
<div>
|
||||
<gf-line-chart
|
||||
class="mb-4"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[historicalDataItems]="historicalDataItems"
|
||||
[isAnimated]="true"
|
||||
[locale]="locale"
|
||||
@ -28,7 +29,7 @@
|
||||
}"
|
||||
[title]="
|
||||
(itemByMonth.key + '-' + (i + 1 < 10 ? '0' + (i + 1) : i + 1)
|
||||
| date: defaultDateFormat) ?? ''
|
||||
| date : defaultDateFormat) ?? ''
|
||||
"
|
||||
(click)="
|
||||
onOpenMarketDataDetail({
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
|
||||
import { MarketDataDetailDialog } from './market-data-detail-dialog.component';
|
||||
|
||||
|
@ -28,7 +28,13 @@
|
||||
>
|
||||
<ng-container i18n>Engagement per Day</ng-container>
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
|
||||
<th
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="mat-header-cell px-1 py-2"
|
||||
i18n
|
||||
>
|
||||
Last Request
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -86,7 +92,10 @@
|
||||
[value]="userItem.engagement"
|
||||
></gf-value>
|
||||
</td>
|
||||
<td class="mat-cell px-1 py-2">
|
||||
<td
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="mat-cell px-1 py-2"
|
||||
>
|
||||
{{ formatDistanceToNow(userItem.lastActivity) }}
|
||||
</td>
|
||||
<td class="mat-cell px-1 py-2">
|
||||
|
@ -166,7 +166,6 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
display: true,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
},
|
||||
type: 'time',
|
||||
@ -177,13 +176,21 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
y: {
|
||||
border: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`,
|
||||
display: false
|
||||
width: 0
|
||||
},
|
||||
display: true,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
color: ({ scale, tick }) => {
|
||||
if (
|
||||
tick.value === 0 ||
|
||||
tick.value === scale.max ||
|
||||
tick.value === scale.min
|
||||
) {
|
||||
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
|
||||
}
|
||||
|
||||
return 'transparent';
|
||||
}
|
||||
},
|
||||
position: 'right',
|
||||
ticks: {
|
||||
|
@ -110,11 +110,7 @@
|
||||
</button>
|
||||
<mat-menu #accountMenu="matMenu" xPosition="before">
|
||||
<ng-container *ngIf="user?.access?.length > 0">
|
||||
<button
|
||||
class="align-items-center d-flex"
|
||||
mat-menu-item
|
||||
(click)="impersonateAccount(null)"
|
||||
>
|
||||
<button mat-menu-item (click)="impersonateAccount(null)">
|
||||
<ion-icon
|
||||
*ngIf="user?.access?.length > 0"
|
||||
class="mr-2"
|
||||
@ -128,7 +124,6 @@
|
||||
</button>
|
||||
<button
|
||||
*ngFor="let accessItem of user?.access"
|
||||
class="align-items-center d-flex"
|
||||
mat-menu-item
|
||||
(click)="impersonateAccount(accessItem.id)"
|
||||
>
|
||||
@ -147,7 +142,7 @@
|
||||
<hr class="m-0" />
|
||||
</ng-container>
|
||||
<a
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{
|
||||
@ -157,7 +152,7 @@
|
||||
>Overview</a
|
||||
>
|
||||
<a
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{
|
||||
@ -167,7 +162,7 @@
|
||||
>Portfolio</a
|
||||
>
|
||||
<a
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{ 'font-weight-bold': currentRoute === 'accounts' }"
|
||||
@ -175,7 +170,6 @@
|
||||
>Accounts</a
|
||||
>
|
||||
<a
|
||||
class="align-items-center d-flex"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{ 'font-weight-bold': currentRoute === 'account' }"
|
||||
@ -184,7 +178,7 @@
|
||||
>
|
||||
<a
|
||||
*ngIf="hasPermissionToAccessAdminControl"
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{ 'font-weight-bold': currentRoute === 'admin' }"
|
||||
@ -193,7 +187,7 @@
|
||||
>
|
||||
<hr class="m-0" />
|
||||
<a
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{
|
||||
@ -206,7 +200,7 @@
|
||||
*ngIf="
|
||||
hasPermissionForSubscription && user?.subscription?.type === 'Basic'
|
||||
"
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{ 'font-weight-bold': currentRoute === 'pricing' }"
|
||||
@ -214,14 +208,14 @@
|
||||
>Pricing</a
|
||||
>
|
||||
<a
|
||||
class="d-block d-sm-none"
|
||||
class="d-flex d-sm-none"
|
||||
i18n
|
||||
mat-menu-item
|
||||
[ngClass]="{ 'font-weight-bold': currentRoute === 'about' }"
|
||||
[routerLink]="['/about']"
|
||||
>About Ghostfolio</a
|
||||
>
|
||||
<hr class="d-block d-sm-none m-0" />
|
||||
<hr class="d-flex d-sm-none m-0" />
|
||||
<button mat-menu-item (click)="onSignOut()">Logout</button>
|
||||
</mat-menu>
|
||||
</ng-container>
|
||||
@ -283,9 +277,9 @@
|
||||
>Markets</a
|
||||
>
|
||||
<a
|
||||
class="d-none d-sm-block mx-1 no-min-width px-1"
|
||||
class="d-none d-sm-block no-min-width"
|
||||
href="https://github.com/ghostfolio/ghostfolio"
|
||||
mat-flat-button
|
||||
mat-icon-button
|
||||
><ion-icon name="logo-github"></ion-icon
|
||||
></a>
|
||||
<button class="mx-1" mat-flat-button (click)="openLoginDialog()">
|
||||
|
@ -11,7 +11,9 @@
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
.mat-flat-button {
|
||||
.mdc-button {
|
||||
height: unset;
|
||||
|
||||
&:not(.mat-primary) {
|
||||
background-color: transparent;
|
||||
text-decoration-color: rgba(var(--palette-primary-500), 1) !important;
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { MatLegacyButtonModule as MatButtonModule } from '@angular/material/legacy-button';
|
||||
import { MatLegacyMenuModule as MatMenuModule } from '@angular/material/legacy-menu';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
import { MatToolbarModule } from '@angular/material/toolbar';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { LoginWithAccessTokenDialogModule } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.module';
|
||||
|
@ -10,6 +10,7 @@
|
||||
symbol="Fear & Greed Index"
|
||||
yMax="100"
|
||||
yMin="0"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[historicalDataItems]="historicalDataItems"
|
||||
[isAnimated]="true"
|
||||
[locale]="user?.settings?.locale"
|
||||
|
@ -283,7 +283,6 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
display: true,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
},
|
||||
min: this.daysInMarket
|
||||
@ -298,13 +297,21 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
y: {
|
||||
border: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`,
|
||||
display: false
|
||||
},
|
||||
display: !this.isInPercent,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
color: ({ scale, tick }) => {
|
||||
if (
|
||||
tick.value === 0 ||
|
||||
tick.value === scale.max ||
|
||||
tick.value === scale.min
|
||||
) {
|
||||
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
|
||||
}
|
||||
|
||||
return 'transparent';
|
||||
}
|
||||
},
|
||||
position: 'right',
|
||||
ticks: {
|
||||
|
@ -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()
|
||||
this.summary.emergencyFund?.toString() ?? '0'
|
||||
);
|
||||
const emergencyFund = parseFloat(emergencyFundInput?.trim());
|
||||
|
||||
|
@ -13,6 +13,7 @@ import {
|
||||
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||
import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper';
|
||||
import {
|
||||
DataProviderInfo,
|
||||
EnhancedSymbolProfile,
|
||||
LineChartItem
|
||||
} from '@ghostfolio/common/interfaces';
|
||||
@ -40,6 +41,7 @@ export class PositionDetailDialog implements OnDestroy, OnInit {
|
||||
public countries: {
|
||||
[code: string]: { name: string; value: number };
|
||||
};
|
||||
public dataProviderInfo: DataProviderInfo;
|
||||
public dividendInBaseCurrency: number;
|
||||
public feeInBaseCurrency: number;
|
||||
public firstBuyDate: string;
|
||||
@ -83,6 +85,7 @@ export class PositionDetailDialog implements OnDestroy, OnInit {
|
||||
.subscribe(
|
||||
({
|
||||
averagePrice,
|
||||
dataProviderInfo,
|
||||
dividendInBaseCurrency,
|
||||
feeInBaseCurrency,
|
||||
firstBuyDate,
|
||||
@ -105,6 +108,7 @@ export class PositionDetailDialog implements OnDestroy, OnInit {
|
||||
this.averagePrice = averagePrice;
|
||||
this.benchmarkDataItems = [];
|
||||
this.countries = {};
|
||||
this.dataProviderInfo = dataProviderInfo;
|
||||
this.dividendInBaseCurrency = dividendInBaseCurrency;
|
||||
this.feeInBaseCurrency = feeInBaseCurrency;
|
||||
this.firstBuyDate = firstBuyDate;
|
||||
|
@ -227,6 +227,12 @@
|
||||
</div>
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
<div *ngIf="dataProviderInfo" class="col-md-12 mb-3 text-center">
|
||||
<hr />
|
||||
<gf-data-provider-credits [dataProviderInfos]="[dataProviderInfo]">
|
||||
</gf-data-provider-credits>
|
||||
<hr />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" [ngClass]="{ 'd-none': !orders?.length }">
|
||||
@ -249,7 +255,7 @@
|
||||
</div>
|
||||
|
||||
<div *ngIf="tags?.length > 0" class="row">
|
||||
<div class="col mb-3">
|
||||
<div class="col">
|
||||
<div class="h5" i18n>Tags</div>
|
||||
<mat-chip-list>
|
||||
<mat-chip *ngFor="let tag of tags">{{ tag.name }}</mat-chip>
|
||||
@ -261,7 +267,7 @@
|
||||
*ngIf="data.hasPermissionToReportDataGlitch === true && orders?.length > 0"
|
||||
class="row"
|
||||
>
|
||||
<div class="col mb-3">
|
||||
<div class="col">
|
||||
<hr />
|
||||
<a color="warn" mat-stroked-button [href]="reportDataGlitchMail"
|
||||
><ion-icon class="mr-1" name="flag-outline"></ion-icon
|
||||
|
@ -6,6 +6,7 @@ import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/lega
|
||||
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module';
|
||||
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module';
|
||||
import { GfActivitiesTableModule } from '@ghostfolio/ui/activities-table/activities-table.module';
|
||||
import { GfDataProviderCreditsModule } from '@ghostfolio/ui/data-provider-credits/data-provider-credits.module';
|
||||
import { GfLineChartModule } from '@ghostfolio/ui/line-chart/line-chart.module';
|
||||
import { GfPortfolioProportionChartModule } from '@ghostfolio/ui/portfolio-proportion-chart/portfolio-proportion-chart.module';
|
||||
import { GfValueModule } from '@ghostfolio/ui/value';
|
||||
@ -18,6 +19,7 @@ import { PositionDetailDialog } from './position-detail-dialog.component';
|
||||
imports: [
|
||||
CommonModule,
|
||||
GfActivitiesTableModule,
|
||||
GfDataProviderCreditsModule,
|
||||
GfDialogFooterModule,
|
||||
GfDialogHeaderModule,
|
||||
GfLineChartModule,
|
||||
|
@ -5,14 +5,16 @@ import {
|
||||
HttpRequest
|
||||
} from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import {
|
||||
HEADER_KEY_IMPERSONATION,
|
||||
HEADER_KEY_TIMEZONE,
|
||||
HEADER_KEY_TOKEN
|
||||
} from '@ghostfolio/common/config';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
import { ImpersonationStorageService } from '../services/impersonation-storage.service';
|
||||
import { TokenStorageService } from '../services/token-storage.service';
|
||||
|
||||
const IMPERSONATION_KEY = 'Impersonation-Id';
|
||||
const TOKEN_HEADER_KEY = 'Authorization';
|
||||
|
||||
@Injectable()
|
||||
export class AuthInterceptor implements HttpInterceptor {
|
||||
public constructor(
|
||||
@ -24,21 +26,27 @@ export class AuthInterceptor implements HttpInterceptor {
|
||||
req: HttpRequest<any>,
|
||||
next: HttpHandler
|
||||
): Observable<HttpEvent<any>> {
|
||||
let authReq = req;
|
||||
let request = req;
|
||||
let headers = request.headers.set(
|
||||
HEADER_KEY_TIMEZONE,
|
||||
Intl?.DateTimeFormat().resolvedOptions().timeZone
|
||||
);
|
||||
|
||||
const token = this.tokenStorageService.getToken();
|
||||
const impersonationId = this.impersonationStorageService.getId();
|
||||
|
||||
if (token !== null) {
|
||||
let headers = req.headers.set(TOKEN_HEADER_KEY, `Bearer ${token}`);
|
||||
headers = headers.set(HEADER_KEY_TOKEN, `Bearer ${token}`);
|
||||
|
||||
const impersonationId = this.impersonationStorageService.getId();
|
||||
|
||||
if (impersonationId !== null) {
|
||||
headers = headers.set(IMPERSONATION_KEY, impersonationId);
|
||||
headers = headers.set(HEADER_KEY_IMPERSONATION, impersonationId);
|
||||
}
|
||||
|
||||
authReq = req.clone({ headers });
|
||||
}
|
||||
|
||||
return next.handle(authReq);
|
||||
request = request.clone({ headers });
|
||||
|
||||
return next.handle(request);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@
|
||||
>hi@ghostfol.io</a
|
||||
></ng-container
|
||||
>
|
||||
or open an issue at
|
||||
or start a discussion at
|
||||
<a
|
||||
href="https://github.com/ghostfolio/ghostfolio"
|
||||
title="Find Ghostfolio on GitHub"
|
||||
@ -62,7 +62,7 @@
|
||||
mat-icon-button
|
||||
title="Follow Ghostfolio on Twitter"
|
||||
>
|
||||
<ion-icon name="logo-twitter" size="large"></ion-icon>
|
||||
<ion-icon name="logo-twitter"></ion-icon>
|
||||
</a>
|
||||
<a
|
||||
class="mx-2"
|
||||
@ -70,7 +70,7 @@
|
||||
mat-icon-button
|
||||
title="Send an e-mail"
|
||||
>
|
||||
<ion-icon name="mail" size="large"></ion-icon>
|
||||
<ion-icon name="mail"></ion-icon>
|
||||
</a>
|
||||
<a
|
||||
class="mx-2"
|
||||
@ -78,7 +78,7 @@
|
||||
mat-icon-button
|
||||
title="Join the Ghostfolio Slack channel"
|
||||
>
|
||||
<ion-icon name="logo-slack" size="large"></ion-icon>
|
||||
<ion-icon name="logo-slack"></ion-icon>
|
||||
</a>
|
||||
<a
|
||||
class="mx-2"
|
||||
@ -86,7 +86,7 @@
|
||||
mat-icon-button
|
||||
title="Find Ghostfolio on GitHub"
|
||||
>
|
||||
<ion-icon name="logo-github" size="large"></ion-icon>
|
||||
<ion-icon name="logo-github"></ion-icon>
|
||||
</a>
|
||||
</p>
|
||||
<div
|
||||
@ -191,7 +191,7 @@
|
||||
<div class="row">
|
||||
<div *ngIf="hasPermissionForSubscription" class="col-md-3 col-xs-12 my-2">
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
class="py-4 w-100"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[routerLink]="['/faq']"
|
||||
@ -203,7 +203,7 @@
|
||||
[ngClass]="{ 'offset-md-4': !hasPermissionForBlog }"
|
||||
>
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
class="py-4 w-100"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[routerLink]="['/about', 'changelog']"
|
||||
@ -212,7 +212,7 @@
|
||||
</div>
|
||||
<div *ngIf="hasPermissionForSubscription" class="col-md-3 col-xs-12 my-2">
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
class="py-4 w-100"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[routerLink]="['/about', 'privacy-policy']"
|
||||
@ -221,7 +221,7 @@
|
||||
</div>
|
||||
<div *ngIf="hasPermissionForBlog" class="col-md-3 col-xs-12 my-2">
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
class="py-4 w-100"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[routerLink]="['/blog']"
|
||||
|
@ -0,0 +1,20 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
|
||||
|
||||
import { GhostfolioMeetsUmbrelPageComponent } from './ghostfolio-meets-umbrel-page.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
canActivate: [AuthGuard],
|
||||
component: GhostfolioMeetsUmbrelPageComponent,
|
||||
path: '',
|
||||
title: 'Ghostfolio meets Umbrel'
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class GhostfolioMeetsUmbrelPageRoutingModule {}
|
@ -0,0 +1,9 @@
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
host: { class: 'page' },
|
||||
selector: 'gf-ghostfolio-meets-umbrel-page',
|
||||
styleUrls: ['./ghostfolio-meets-umbrel-page.scss'],
|
||||
templateUrl: './ghostfolio-meets-umbrel-page.html'
|
||||
})
|
||||
export class GhostfolioMeetsUmbrelPageComponent {}
|
@ -0,0 +1,200 @@
|
||||
<div class="blog container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 offset-md-2">
|
||||
<article>
|
||||
<div class="mb-4 text-center">
|
||||
<h1 class="mb-1">Ghostfolio meets Umbrel</h1>
|
||||
<div class="mb-3 text-muted"><small>2023-02-25</small></div>
|
||||
<img
|
||||
alt="Ghostfolio meets Umbrel Teaser"
|
||||
class="border rounded w-100"
|
||||
src="../assets/images/blog/ghostfolio-x-umbrel.png"
|
||||
title="Ghostfolio meets Umbrel"
|
||||
/>
|
||||
</div>
|
||||
<section class="mb-4">
|
||||
<p>
|
||||
We are happy to announce that
|
||||
<a href="https://ghostfol.io">Ghostfolio</a>, the web-based personal
|
||||
finance management software, is now available in the
|
||||
<a href="https://umbrel.com" target="_blank">Umbrel</a> App Store, a
|
||||
home server OS for self-hosting.
|
||||
</p>
|
||||
<p>
|
||||
In recent years, we have seen an increasing number of individuals
|
||||
and organizations moving their data to the cloud. While cloud
|
||||
computing has its benefits, such as accessibility and scalability,
|
||||
it also comes with some concerns regarding data privacy and
|
||||
security. However, there is an alternative to cloud computing that
|
||||
provides the convenience of the cloud while giving you ownership and
|
||||
control of your data: personal servers.
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-4">
|
||||
<h2 class="h4">Umbrel – A personal server OS for self-hosting</h2>
|
||||
<p>
|
||||
<a href="https://github.com/getumbrel/umbrel" target="_blank"
|
||||
>Umbrel</a
|
||||
>
|
||||
is an operating system based on
|
||||
<a href="https://www.docker.com" target="_blank">Docker</a> that
|
||||
allows you to run a personal server in your home. With it, you can
|
||||
self-host open source apps directly from an integrated app store.
|
||||
This means that you can discover self-hosted apps directly in the
|
||||
<a href="https://github.com/getumbrel/umbrel-apps" target="_blank"
|
||||
>Umbrel App Store</a
|
||||
>
|
||||
and install them in one click. You can get up and running Umbrel on
|
||||
a Raspberry Pi 4, any Ubuntu / Debian system, or a VPS in only 5
|
||||
minutes.
|
||||
</p>
|
||||
<p>
|
||||
Umbrel offers numerous advantages for running a personal server in
|
||||
your home, such as enhanced data privacy and security, ownership and
|
||||
control of your data, and access to a diverse selection of
|
||||
self-hosted apps.
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-4">
|
||||
<h2 class="h4">
|
||||
Ghostfolio – Track your portfolio without being tracked
|
||||
</h2>
|
||||
<p>
|
||||
Keeping track of multiple assets can make managing your personal
|
||||
finance a challenging task. However, there are tools available
|
||||
beyond spreadsheets that can help you streamline the process and
|
||||
make well-informed investment decisions based on data.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://github.com/ghostfolio/ghostfolio" target="_blank"
|
||||
>Ghostfolio</a
|
||||
>
|
||||
is a modern open source web application designed to manage your
|
||||
personal finance with ease and confidence. It presents your current
|
||||
assets in real-time, including stocks, ETFs, cryptocurrencies,
|
||||
commodities, and more. It allows you to track and analyze your
|
||||
investments in one place.
|
||||
</p>
|
||||
<p>
|
||||
The application has a range of features such as real-time asset
|
||||
tracking, data import and export and advanced portfolio analytics
|
||||
tools.
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-4">
|
||||
<p>
|
||||
To participate in the ongoing development of Ghostfolio, please feel
|
||||
free to reach out to us on our
|
||||
<a href="https://ghostfolio.slack.com" target="_blank"
|
||||
>Slack channel</a
|
||||
>
|
||||
or via Twitter
|
||||
<a href="https://twitter.com/ghostfolio_" target="_blank"
|
||||
>@ghostfolio_</a
|
||||
>. We look forward to hearing from you!
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-4">
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Announcement</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">App Store</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Assets</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Cloud</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Commodity</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Cryptocurrency</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Debian</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Development</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Docker</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">ETF</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Fintech</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Ghostfolio</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Home Server</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Investing</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Linux</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Open Source</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Operating System</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">OS</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">OSS</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Personal Finance</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Personal Server</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Portfolio</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Privacy</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Raspberry Pi</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Security</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Software</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Spreadsheet</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Stocks</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Ubuntu</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Umbrel</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">VPS</span>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="badge badge-light">Wealth Management</span>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,13 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { GhostfolioMeetsUmbrelPageRoutingModule } from './ghostfolio-meets-umbrel-page-routing.module';
|
||||
import { GhostfolioMeetsUmbrelPageComponent } from './ghostfolio-meets-umbrel-page.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [GhostfolioMeetsUmbrelPageComponent],
|
||||
imports: [CommonModule, GhostfolioMeetsUmbrelPageRoutingModule, RouterModule],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||
})
|
||||
export class GhostfolioMeetsUmbrelPageModule {}
|
@ -0,0 +1,3 @@
|
||||
:host {
|
||||
display: block;
|
||||
}
|
@ -2,6 +2,32 @@
|
||||
<div class="mb-5 row">
|
||||
<div class="col">
|
||||
<h3 class="d-none d-sm-block mb-3 text-center" i18n>Blog</h3>
|
||||
<mat-card appearance="outlined" class="mb-3">
|
||||
<mat-card-content>
|
||||
<div class="container p-0">
|
||||
<div class="flex-nowrap no-gutters row">
|
||||
<a
|
||||
class="d-flex overflow-hidden w-100"
|
||||
href="../en/blog/2023/02/ghostfolio-meets-umbrel"
|
||||
>
|
||||
<div class="flex-grow-1 overflow-hidden">
|
||||
<div class="h6 m-0 text-truncate">
|
||||
Ghostfolio meets Umbrel
|
||||
</div>
|
||||
<div class="d-flex text-muted">2023-02-25</div>
|
||||
</div>
|
||||
<div class="align-items-center d-flex">
|
||||
<ion-icon
|
||||
class="chevron text-muted"
|
||||
name="chevron-forward-outline"
|
||||
size="small"
|
||||
></ion-icon>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card appearance="outlined" class="mb-3">
|
||||
<mat-card-content>
|
||||
<div class="container p-0">
|
||||
|
@ -17,8 +17,8 @@ export class LandingPageComponent implements OnDestroy, OnInit {
|
||||
[code: string]: { value: number };
|
||||
} = {};
|
||||
public currentYear = format(new Date(), 'yyyy');
|
||||
public demoAuthToken: string;
|
||||
public deviceType: string;
|
||||
public hasPermissionForDemo: boolean;
|
||||
public hasPermissionForStatistics: boolean;
|
||||
public hasPermissionForSubscription: boolean;
|
||||
public hasPermissionToCreateUser: boolean;
|
||||
@ -54,6 +54,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
|
||||
) {
|
||||
const {
|
||||
countriesOfSubscribers = [],
|
||||
demoAuthToken,
|
||||
globalPermissions,
|
||||
statistics
|
||||
} = this.dataService.fetchInfo();
|
||||
@ -64,6 +65,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
|
||||
};
|
||||
}
|
||||
|
||||
this.hasPermissionForDemo = !!demoAuthToken;
|
||||
this.hasPermissionForStatistics = hasPermission(
|
||||
globalPermissions,
|
||||
permissions.enableStatistics
|
||||
|
@ -40,12 +40,18 @@
|
||||
>
|
||||
Get Started
|
||||
</a>
|
||||
<div class="d-inline-block mx-3 text-muted">or</div></ng-container
|
||||
>
|
||||
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</ng-container>
|
||||
<ng-container *ngIf="hasPermissionForDemo">
|
||||
<div
|
||||
*ngIf="hasPermissionToCreateUser"
|
||||
class="d-inline-block mx-3 text-muted"
|
||||
>
|
||||
or
|
||||
</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -165,6 +171,14 @@
|
||||
title="Product Hunt – The best new products in tech."
|
||||
></a>
|
||||
</div>
|
||||
<div class="align-items-center col-md-3 d-flex justify-content-center my-1">
|
||||
<a
|
||||
class="d-block logo logo-reddit mask"
|
||||
href="https://www.reddit.com"
|
||||
target="_blank"
|
||||
title="Reddit - Dive into anything"
|
||||
></a>
|
||||
</div>
|
||||
<div class="col-md-3 d-flex justify-content-center my-1">
|
||||
<a
|
||||
class="d-block logo logo-sackgeld mask"
|
||||
@ -181,6 +195,14 @@
|
||||
title="SourceForge: The Complete Open-Source and Business Software Platform"
|
||||
></a>
|
||||
</div>
|
||||
<div class="align-items-center col-md-3 d-flex justify-content-center my-1">
|
||||
<a
|
||||
class="d-block logo logo-umbrel mask"
|
||||
href="https://umbrel.com"
|
||||
target="_blank"
|
||||
title="Umbrel — A personal server OS for self-hosting"
|
||||
></a>
|
||||
</div>
|
||||
<div class="col-md-3 d-flex justify-content-center my-1">
|
||||
<a
|
||||
class="d-block logo logo-unraid mask"
|
||||
@ -363,16 +385,20 @@
|
||||
<div class="col">
|
||||
<h2 class="h4 mb-1 text-center">Are <strong>you</strong> ready?</h2>
|
||||
<p class="lead mb-3 text-center">
|
||||
Join now or check out the example account
|
||||
Join now<ng-container *ngIf="hasPermissionForDemo">
|
||||
or check out the example account</ng-container
|
||||
>
|
||||
</p>
|
||||
<div class="py-2 text-center">
|
||||
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||
Get Started
|
||||
</a>
|
||||
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
<ng-container *ngIf="hasPermissionForDemo">
|
||||
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -69,6 +69,11 @@
|
||||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
&.logo-reddit {
|
||||
mask-image: url('/assets/images/logo-reddit.svg');
|
||||
max-height: 1rem;
|
||||
}
|
||||
|
||||
&.logo-sackgeld {
|
||||
mask-image: url('/assets/images/logo-sackgeld.png');
|
||||
}
|
||||
@ -77,6 +82,11 @@
|
||||
mask-image: url('/assets/images/logo-sourceforge.svg');
|
||||
}
|
||||
|
||||
&.logo-umbrel {
|
||||
mask-image: url('/assets/images/logo-umbrel.svg');
|
||||
max-height: 1.5rem;
|
||||
}
|
||||
|
||||
&.logo-unraid {
|
||||
mask-image: url('/assets/images/logo-unraid.svg');
|
||||
}
|
||||
@ -114,8 +124,10 @@
|
||||
&.logo-agplv3,
|
||||
&.logo-alternative-to,
|
||||
&.logo-privacy-tools,
|
||||
&.logo-reddit,
|
||||
&.logo-sackgeld,
|
||||
&.logo-sourceforge,
|
||||
&.logo-umbrel,
|
||||
&.logo-unraid {
|
||||
background-color: rgba(var(--light-primary-text));
|
||||
}
|
||||
|
@ -9,12 +9,13 @@ import {
|
||||
ViewChild
|
||||
} from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
|
||||
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
|
||||
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
|
||||
import {
|
||||
MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA,
|
||||
MatLegacyDialogRef as MatDialogRef
|
||||
} from '@angular/material/legacy-dialog';
|
||||
import { getDateFormatString } from '@ghostfolio/common/helper';
|
||||
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
|
||||
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
|
||||
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
|
||||
@ -56,6 +57,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
});
|
||||
public currencies: string[] = [];
|
||||
public currentMarketPrice = null;
|
||||
public defaultDateFormat: string;
|
||||
public filteredLookupItems: LookupItem[];
|
||||
public filteredLookupItemsObservable: Observable<LookupItem[]>;
|
||||
public filteredTagsObservable: Observable<Tag[]>;
|
||||
@ -85,6 +87,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
const { currencies, platforms, tags } = this.dataService.fetchInfo();
|
||||
|
||||
this.currencies = currencies;
|
||||
this.defaultDateFormat = getDateFormatString(this.locale);
|
||||
this.platforms = platforms;
|
||||
this.tags = tags.map(({ id, name }) => {
|
||||
return {
|
||||
@ -106,6 +109,10 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
this.data.activity?.SymbolProfile?.currency,
|
||||
Validators.required
|
||||
],
|
||||
currencyOfUnitPrice: [
|
||||
this.data.activity?.SymbolProfile?.currency,
|
||||
Validators.required
|
||||
],
|
||||
dataSource: [
|
||||
this.data.activity?.SymbolProfile?.dataSource,
|
||||
Validators.required
|
||||
@ -131,16 +138,26 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
})
|
||||
],
|
||||
type: [undefined, Validators.required], // Set after value changes subscription
|
||||
unitPrice: [this.data.activity?.unitPrice, Validators.required]
|
||||
unitPrice: [this.data.activity?.unitPrice, Validators.required],
|
||||
unitPriceInCustomCurrency: [
|
||||
this.data.activity?.unitPrice,
|
||||
Validators.required
|
||||
]
|
||||
});
|
||||
|
||||
this.activityForm.valueChanges
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(async () => {
|
||||
let exchangeRate = 1;
|
||||
let exchangeRateOfFee = 1;
|
||||
let exchangeRateOfUnitPrice = 1;
|
||||
|
||||
this.activityForm.controls['feeInCustomCurrency'].setErrors(null);
|
||||
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors(null);
|
||||
|
||||
const currency = this.activityForm.controls['currency'].value;
|
||||
const currencyOfFee = this.activityForm.controls['currencyOfFee'].value;
|
||||
const currencyOfUnitPrice =
|
||||
this.activityForm.controls['currencyOfUnitPrice'].value;
|
||||
const date = this.activityForm.controls['date'].value;
|
||||
|
||||
if (currency && currencyOfFee && currency !== currencyOfFee && date) {
|
||||
@ -154,18 +171,57 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
);
|
||||
|
||||
exchangeRate = marketPrice;
|
||||
} catch {}
|
||||
exchangeRateOfFee = marketPrice;
|
||||
} catch {
|
||||
this.activityForm.controls['feeInCustomCurrency'].setErrors({
|
||||
invalid: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const feeInCustomCurrency =
|
||||
this.activityForm.controls['feeInCustomCurrency'].value *
|
||||
exchangeRate;
|
||||
exchangeRateOfFee;
|
||||
|
||||
this.activityForm.controls['fee'].setValue(feeInCustomCurrency, {
|
||||
emitEvent: false
|
||||
});
|
||||
|
||||
if (
|
||||
currency &&
|
||||
currencyOfUnitPrice &&
|
||||
currency !== currencyOfUnitPrice &&
|
||||
date
|
||||
) {
|
||||
try {
|
||||
const { marketPrice } = await lastValueFrom(
|
||||
this.dataService
|
||||
.fetchExchangeRateForDate({
|
||||
date,
|
||||
symbol: `${currencyOfUnitPrice}-${currency}`
|
||||
})
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
);
|
||||
|
||||
exchangeRateOfUnitPrice = marketPrice;
|
||||
} catch {
|
||||
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors({
|
||||
invalid: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const unitPriceInCustomCurrency =
|
||||
this.activityForm.controls['unitPriceInCustomCurrency'].value *
|
||||
exchangeRateOfUnitPrice;
|
||||
|
||||
this.activityForm.controls['unitPrice'].setValue(
|
||||
unitPriceInCustomCurrency,
|
||||
{
|
||||
emitEvent: false
|
||||
}
|
||||
);
|
||||
|
||||
if (
|
||||
this.activityForm.controls['type'].value === 'BUY' ||
|
||||
this.activityForm.controls['type'].value === 'ITEM'
|
||||
@ -187,11 +243,10 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
this.filteredLookupItemsObservable = this.activityForm.controls[
|
||||
'searchSymbol'
|
||||
].valueChanges.pipe(
|
||||
startWith(''),
|
||||
debounceTime(400),
|
||||
distinctUntilChanged(),
|
||||
switchMap((query: string) => {
|
||||
if (isString(query)) {
|
||||
if (isString(query) && query.length > 1) {
|
||||
const filteredLookupItemsObservable =
|
||||
this.dataService.fetchSymbols(query);
|
||||
|
||||
@ -231,6 +286,9 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
this.activityForm.controls['currencyOfFee'].setValue(
|
||||
this.data.user.settings.baseCurrency
|
||||
);
|
||||
this.activityForm.controls['currencyOfUnitPrice'].setValue(
|
||||
this.data.user.settings.baseCurrency
|
||||
);
|
||||
this.activityForm.controls['dataSource'].removeValidators(
|
||||
Validators.required
|
||||
);
|
||||
@ -288,7 +346,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
|
||||
public applyCurrentMarketPrice() {
|
||||
this.activityForm.patchValue({
|
||||
unitPrice: this.currentMarketPrice
|
||||
currencyOfUnitPrice: this.activityForm.controls['currency'].value,
|
||||
unitPriceInCustomCurrency: this.currentMarketPrice
|
||||
});
|
||||
}
|
||||
|
||||
@ -415,6 +474,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
.subscribe(({ currency, dataSource, marketPrice }) => {
|
||||
this.activityForm.controls['currency'].setValue(currency);
|
||||
this.activityForm.controls['currencyOfFee'].setValue(currency);
|
||||
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency);
|
||||
this.activityForm.controls['dataSource'].setValue(dataSource);
|
||||
|
||||
this.currentMarketPrice = marketPrice;
|
||||
|
@ -7,7 +7,7 @@
|
||||
<h1 *ngIf="data.activity.id" i18n mat-dialog-title>Update activity</h1>
|
||||
<h1 *ngIf="!data.activity.id" i18n mat-dialog-title>Add activity</h1>
|
||||
<div class="flex-grow-1 pt-3" mat-dialog-content>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Type</mat-label>
|
||||
<mat-select formControlName="type">
|
||||
@ -18,7 +18,7 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Account</mat-label>
|
||||
<mat-select formControlName="accountId">
|
||||
@ -33,6 +33,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': !activityForm.controls['searchSymbol'].hasValidator(Validators.required) }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -54,11 +55,15 @@
|
||||
<ng-container>
|
||||
<mat-option
|
||||
*ngFor="let lookupItem of filteredLookupItemsObservable | async"
|
||||
class="autocomplete"
|
||||
class="line-height-1"
|
||||
[value]="lookupItem"
|
||||
>
|
||||
<span class="mr-2 symbol">{{ lookupItem.symbol | gfSymbol }}</span
|
||||
><span><b>{{ lookupItem.name }}</b></span>
|
||||
<span><b>{{ lookupItem.name }}</b></span>
|
||||
<br />
|
||||
<small class="text-muted"
|
||||
>{{ lookupItem.symbol | gfSymbol }} · {{ lookupItem.currency
|
||||
}}</small
|
||||
>
|
||||
</mat-option>
|
||||
</ng-container>
|
||||
</mat-autocomplete>
|
||||
@ -66,6 +71,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': !activityForm.controls['name'].hasValidator(Validators.required) }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -89,7 +95,7 @@
|
||||
<input formControlName="dataSource" matInput />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Date</mat-label>
|
||||
<input formControlName="date" matInput [matDatepicker]="date" />
|
||||
@ -103,13 +109,60 @@
|
||||
<mat-datepicker #date disabled="false"></mat-datepicker>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Quantity</mat-label>
|
||||
<input formControlName="quantity" matInput type="number" />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="align-items-start d-flex">
|
||||
<div class="align-items-start d-flex mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label
|
||||
><ng-container [ngSwitch]="activityForm.controls['type']?.value">
|
||||
<ng-container *ngSwitchCase="'DIVIDEND'" i18n
|
||||
>Dividend</ng-container
|
||||
>
|
||||
<ng-container *ngSwitchCase="'ITEM'" i18n>Value</ng-container>
|
||||
<ng-container *ngSwitchDefault i18n>Unit Price</ng-container>
|
||||
</ng-container>
|
||||
</mat-label>
|
||||
<input
|
||||
formControlName="unitPriceInCustomCurrency"
|
||||
matInput
|
||||
type="number"
|
||||
/>
|
||||
<div
|
||||
class="ml-2"
|
||||
matTextSuffix
|
||||
[ngClass]="{ 'd-none': !activityForm.controls['currency']?.value }"
|
||||
>
|
||||
<mat-select formControlName="currencyOfUnitPrice">
|
||||
<mat-option *ngFor="let currency of currencies" [value]="currency">
|
||||
{{ currency }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</div>
|
||||
<mat-error
|
||||
*ngIf="activityForm.controls['unitPriceInCustomCurrency'].hasError('invalid')"
|
||||
><ng-container i18n
|
||||
>Oops! Could not get the historical exchange rate from</ng-container
|
||||
>
|
||||
{{ activityForm.controls['date']?.value | date: defaultDateFormat
|
||||
}}</mat-error
|
||||
>
|
||||
</mat-form-field>
|
||||
<button
|
||||
*ngIf="currentMarketPrice && (data.activity.type === 'BUY' || data.activity.type === 'SELL')"
|
||||
class="apply-current-market-price ml-2 no-min-width"
|
||||
mat-button
|
||||
title="Apply current market price"
|
||||
type="button"
|
||||
(click)="applyCurrentMarketPrice()"
|
||||
>
|
||||
<ion-icon class="text-muted" name="refresh-outline"></ion-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div class="d-none">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label
|
||||
><ng-container [ngSwitch]="activityForm.controls['type']?.value">
|
||||
@ -125,18 +178,8 @@
|
||||
>{{ activityForm.controls['currency'].value }}</span
|
||||
>
|
||||
</mat-form-field>
|
||||
<button
|
||||
*ngIf="currentMarketPrice && (data.activity.type === 'BUY' || data.activity.type === 'SELL')"
|
||||
class="apply-current-market-price ml-2 no-min-width"
|
||||
mat-button
|
||||
title="Apply current market price"
|
||||
type="button"
|
||||
(click)="applyCurrentMarketPrice()"
|
||||
>
|
||||
<ion-icon class="text-muted" name="refresh-outline"></ion-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Fee</mat-label>
|
||||
<input formControlName="feeInCustomCurrency" matInput type="number" />
|
||||
@ -151,6 +194,14 @@
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</div>
|
||||
<mat-error
|
||||
*ngIf="activityForm.controls['feeInCustomCurrency'].hasError('invalid')"
|
||||
><ng-container i18n
|
||||
>Oops! Could not get the historical exchange rate from</ng-container
|
||||
>
|
||||
{{ activityForm.controls['date']?.value | date: defaultDateFormat
|
||||
}}</mat-error
|
||||
>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="d-none">
|
||||
@ -162,7 +213,7 @@
|
||||
>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Note</mat-label>
|
||||
<textarea
|
||||
@ -175,6 +226,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -190,6 +242,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -204,7 +257,7 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div [ngClass]="{ 'd-none': tags?.length <= 0 }">
|
||||
<div class="mb-3" [ngClass]="{ 'd-none': tags?.length <= 0 }">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Tags</mat-label>
|
||||
<mat-chip-grid #tagsChipList>
|
||||
|
@ -1,13 +1,13 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatChipsModule } from '@angular/material/chips';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
|
||||
|
@ -10,16 +10,6 @@
|
||||
.mat-dialog-content {
|
||||
max-height: unset;
|
||||
|
||||
.autocomplete {
|
||||
font-size: 90%;
|
||||
height: 2.5rem;
|
||||
|
||||
.symbol {
|
||||
display: inline-block;
|
||||
min-width: 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.mat-datepicker-input {
|
||||
&.mat-mdc-input-element:disabled {
|
||||
color: var(--dark-primary-text);
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
|
||||
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
||||
import { PortfolioReportRule, User } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
@ -20,6 +21,7 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
public deviceType: string;
|
||||
public feeRules: PortfolioReportRule[];
|
||||
public fireWealth: Big;
|
||||
public hasImpersonationId: boolean;
|
||||
public hasPermissionToCreateOrder: boolean;
|
||||
public hasPermissionToUpdateUserSettings: boolean;
|
||||
public isLoading = false;
|
||||
@ -33,6 +35,7 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
private changeDetectorRef: ChangeDetectorRef,
|
||||
private dataService: DataService,
|
||||
private deviceService: DeviceDetectorService,
|
||||
private impersonationStorageService: ImpersonationStorageService,
|
||||
private userService: UserService
|
||||
) {}
|
||||
|
||||
@ -70,6 +73,13 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.userService.stateChanged
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((state) => {
|
||||
@ -91,6 +101,45 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
public onAnnualInterestRateChange(annualInterestRate: number) {
|
||||
this.dataService
|
||||
.putUserSetting({ annualInterestRate })
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(() => {
|
||||
this.userService.remove();
|
||||
|
||||
this.userService
|
||||
.get()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public onRetirementDateChange(retirementDate: Date) {
|
||||
this.dataService
|
||||
.putUserSetting({
|
||||
retirementDate: retirementDate.toISOString(),
|
||||
projectedTotalAmount: null
|
||||
})
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(() => {
|
||||
this.userService.remove();
|
||||
|
||||
this.userService
|
||||
.get()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public onSavingsRateChange(savingsRate: number) {
|
||||
this.dataService
|
||||
.putUserSetting({ savingsRate })
|
||||
@ -109,6 +158,27 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
public onProjectedTotalAmountChange(projectedTotalAmount: number) {
|
||||
this.dataService
|
||||
.putUserSetting({
|
||||
projectedTotalAmount,
|
||||
retirementDate: null
|
||||
})
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(() => {
|
||||
this.userService.remove();
|
||||
|
||||
this.userService
|
||||
.get()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
this.unsubscribeSubject.next();
|
||||
this.unsubscribeSubject.complete();
|
||||
|
@ -11,13 +11,19 @@
|
||||
></gf-premium-indicator>
|
||||
</h4>
|
||||
<gf-fire-calculator
|
||||
[annualInterestRate]="user?.settings?.annualInterestRate"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[currency]="user?.settings?.baseCurrency"
|
||||
[deviceType]="deviceType"
|
||||
[fireWealth]="fireWealth?.toNumber()"
|
||||
[hasPermissionToUpdateUserSettings]="hasPermissionToUpdateUserSettings"
|
||||
[hasPermissionToUpdateUserSettings]="!hasImpersonationId && hasPermissionToUpdateUserSettings"
|
||||
[locale]="user?.settings?.locale"
|
||||
[projectedTotalAmount]="user?.settings?.projectedTotalAmount"
|
||||
[retirementDate]="user?.settings?.retirementDate"
|
||||
[savingsRate]="user?.settings?.savingsRate"
|
||||
(annualInterestRateChanged)="onAnnualInterestRateChange($event)"
|
||||
(projectedTotalAmountChanged)="onProjectedTotalAmountChange($event)"
|
||||
(retirementDateChanged)="onRetirementDateChange($event)"
|
||||
(savingsRateChanged)="onSavingsRateChange($event)"
|
||||
></gf-fire-calculator>
|
||||
</div>
|
||||
@ -69,12 +75,14 @@
|
||||
></gf-value>
|
||||
per month</span
|
||||
>, based on your total assets of
|
||||
<gf-value
|
||||
class="d-inline-block"
|
||||
[currency]="user?.settings?.baseCurrency"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="fireWealth?.toNumber()"
|
||||
></gf-value>
|
||||
<span class="font-weight-bold"
|
||||
><gf-value
|
||||
class="d-inline-block"
|
||||
[currency]="user?.settings?.baseCurrency"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="fireWealth?.toNumber()"
|
||||
></gf-value
|
||||
></span>
|
||||
and a withdrawal rate of 4%.
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,6 +15,9 @@ import { takeUntil } from 'rxjs/operators';
|
||||
export class PricingPageComponent implements OnDestroy, OnInit {
|
||||
public baseCurrency: string;
|
||||
public coupon: number;
|
||||
public importAndExportTooltipBasic = translate(
|
||||
'DATA_IMPORT_AND_EXPORT_TOOLTIP_BASIC'
|
||||
);
|
||||
public importAndExportTooltipOSS = translate(
|
||||
'DATA_IMPORT_AND_EXPORT_TOOLTIP_OSS'
|
||||
);
|
||||
|
@ -106,6 +106,13 @@
|
||||
></ion-icon>
|
||||
<a i18n [routerLink]="['/features']">and more Features...</a>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon
|
||||
class="mr-1"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
<span i18n>Community Support</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p i18n>Self-hosted, update manually.</p>
|
||||
@ -158,35 +165,19 @@
|
||||
></ion-icon>
|
||||
<span i18n>Portfolio Performance</span>
|
||||
</li>
|
||||
<li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon
|
||||
class="invisible"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
</li>
|
||||
<li>
|
||||
<ion-icon
|
||||
class="invisible"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
</li>
|
||||
<li>
|
||||
<ion-icon
|
||||
class="invisible"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
</li>
|
||||
<li>
|
||||
<ion-icon
|
||||
class="invisible"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
</li>
|
||||
<li>
|
||||
<ion-icon
|
||||
class="invisible"
|
||||
class="mr-1"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
<span i18n>Data Import and Export</span>
|
||||
<span
|
||||
class="align-items-center d-flex ml-1"
|
||||
matTooltipPosition="above"
|
||||
[matTooltip]="importAndExportTooltipBasic"
|
||||
>
|
||||
<ion-icon name="information-circle-outline"></ion-icon>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -296,6 +287,13 @@
|
||||
></ion-icon>
|
||||
<a i18n [routerLink]="['/features']">and more Features...</a>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon
|
||||
class="mr-1"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
<span i18n>Email and Chat Support</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p i18n>Fully managed Ghostfolio cloud offering.</p>
|
||||
|
@ -63,7 +63,7 @@ export class RegisterPageComponent implements OnDestroy, OnInit {
|
||||
|
||||
public async createAccount() {
|
||||
this.dataService
|
||||
.postUser({ country: this.userService.getCountry() })
|
||||
.postUser()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(({ accessToken, authToken, role }) => {
|
||||
this.openShowAccessTokenDialog(accessToken, authToken, role);
|
||||
|
@ -21,7 +21,6 @@
|
||||
class="d-inline-block"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[disabled]="!demoAuthToken"
|
||||
(click)="createAccount()"
|
||||
>
|
||||
<ng-container i18n>Create Account</ng-container>
|
||||
|
@ -405,8 +405,8 @@ export class DataService {
|
||||
return this.http.post<OrderModel>(`/api/v1/order`, aOrder);
|
||||
}
|
||||
|
||||
public postUser({ country }: { country: string }) {
|
||||
return this.http.post<UserItem>(`/api/v1/user`, { country });
|
||||
public postUser() {
|
||||
return this.http.post<UserItem>(`/api/v1/user`, {});
|
||||
}
|
||||
|
||||
public putAccount(aAccount: UpdateAccountDto) {
|
||||
|
@ -6,9 +6,9 @@ import { SubscriptionInterstitialDialogParams } from '@ghostfolio/client/compone
|
||||
import { SubscriptionInterstitialDialog } from '@ghostfolio/client/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component';
|
||||
import { User } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import { timezoneCitiesToCountries } from '@ghostfolio/common/timezone-cities-to-countries';
|
||||
import { parseISO } from 'date-fns';
|
||||
import { DeviceDetectorService } from 'ngx-device-detector';
|
||||
import { Subject, of } from 'rxjs';
|
||||
import { Subject, of, Observable } from 'rxjs';
|
||||
import { throwError } from 'rxjs';
|
||||
import { catchError, map, takeUntil } from 'rxjs/operators';
|
||||
|
||||
@ -46,27 +46,17 @@ export class UserService extends ObservableStore<UserStoreState> {
|
||||
}
|
||||
}
|
||||
|
||||
public getCountry() {
|
||||
let country: string;
|
||||
|
||||
if (Intl) {
|
||||
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
const timeZoneArray = timeZone.split('/');
|
||||
const city = timeZoneArray[timeZoneArray.length - 1];
|
||||
|
||||
country = timezoneCitiesToCountries[city];
|
||||
}
|
||||
|
||||
return country;
|
||||
}
|
||||
|
||||
public remove() {
|
||||
this.setState({ user: null }, UserStoreActions.RemoveUser);
|
||||
}
|
||||
|
||||
private fetchUser() {
|
||||
return this.http.get<User>('/api/v1/user').pipe(
|
||||
private fetchUser(): Observable<User> {
|
||||
return this.http.get<any>('/api/v1/user').pipe(
|
||||
map((user) => {
|
||||
if (user.settings?.retirementDate) {
|
||||
user.settings.retirementDate = parseISO(user.settings.retirementDate);
|
||||
}
|
||||
|
||||
this.setState({ user }, UserStoreActions.GetUser);
|
||||
|
||||
if (
|
||||
|
BIN
apps/client/src/assets/images/blog/ghostfolio-x-umbrel.png
Normal file
BIN
apps/client/src/assets/images/blog/ghostfolio-x-umbrel.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
7
apps/client/src/assets/images/logo-reddit.svg
Normal file
7
apps/client/src/assets/images/logo-reddit.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-0.001931647947148285 -0.5831467598558726 286.0572555076589 91.08314675985588" width="2500" height="801">
|
||||
<circle cx="238.236" cy="17.302" fill="#fff" r="10.647" />
|
||||
<g fill="#fff">
|
||||
<path d="M86.817 62.554c5.183 0 8.2-3.876 7.976-7.69a25.549 25.549 0 0 0-.534-4.292C91.081 36.8 79.879 26.619 66.546 26.619c-15.8 0-28.615 14.3-28.615 31.942S50.743 90.5 66.546 90.5c9.9 0 16.97-3.605 22.116-9.256a6.154 6.154 0 0 0-1.012-9.2c-2.485-1.727-5.631-1.145-7.943.807-2.207 1.863-6.423 5.676-13.161 5.676-8.048 0-14.761-6.859-16.3-15.971zM66.546 38.6c7.243 0 13.4 5.556 15.687 13.309H50.86C53.144 44.153 59.3 38.6 66.546 38.6zM38.6 32.81a5.986 5.986 0 0 0-5-5.9c-8.721-1.315-16.873 1.941-21.615 7.836v-.8A5.989 5.989 0 1 0 0 33.939v49.01a6.145 6.145 0 0 0 5.619 6.212 5.989 5.989 0 0 0 6.359-5.978V57.9c0-11.188 8.414-20.374 19.96-19.126a5.373 5.373 0 0 0 1.183 0A5.987 5.987 0 0 0 38.6 32.81zM244.225 39.262a5.989 5.989 0 0 0-11.978 0v43.921a5.989 5.989 0 0 0 11.978 0zM155.053 5.989A5.989 5.989 0 0 0 149.064 0a5.989 5.989 0 0 0-5.989 5.989v26.746a20.892 20.892 0 0 0-15.306-6.116c-15.8 0-28.615 14.3-28.615 31.942S111.965 90.5 127.769 90.5a21.154 21.154 0 0 0 15.415-6.193 5.988 5.988 0 0 0 11.869-1.127zm-27.284 72.536c-9.188 0-16.637-8.939-16.637-19.964S118.581 38.6 127.769 38.6s16.636 8.938 16.636 19.964-7.448 19.961-16.636 19.961zM217.606 5.989A5.989 5.989 0 0 0 211.617 0a5.989 5.989 0 0 0-5.989 5.989v26.746a20.889 20.889 0 0 0-15.306-6.116c-15.8 0-28.614 14.3-28.614 31.942S174.519 90.5 190.322 90.5a21.156 21.156 0 0 0 15.416-6.193 5.987 5.987 0 0 0 11.868-1.127zm-27.284 72.536c-9.188 0-16.636-8.939-16.636-19.964S181.134 38.6 190.322 38.6s16.637 8.938 16.637 19.964-7.448 19.961-16.637 19.961zM274.654 83.183V38.6h5.324a5.445 5.445 0 0 0 5.494-4.969 5.325 5.325 0 0 0-5.312-5.679h-5.506V19.5a6.126 6.126 0 0 0-5.591-6.182 5.989 5.989 0 0 0-6.387 5.976v8.651h-4.959a5.445 5.445 0 0 0-5.495 4.97 5.324 5.324 0 0 0 5.312 5.678h5.142v44.59a5.989 5.989 0 0 0 5.989 5.989 5.989 5.989 0 0 0 5.989-5.989z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
4
apps/client/src/assets/images/logo-umbrel.svg
Normal file
4
apps/client/src/assets/images/logo-umbrel.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="93" height="46" viewBox="0 0 93 46" fill="none">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.07105 44.3975C7.22517 44.2572 7.36938 44.1052 7.50216 43.9424C9.34732 41.7938 12.2358 40.4302 16.9242 40.4302C21.3462 40.4302 25.1394 41.6634 28.4565 44.1004L28.5874 44.1982C30.3898 45.5447 32.8435 45.6003 34.7046 44.3366C38.6683 41.6452 42.5089 40.4302 46.2913 40.4302C50.0067 40.4302 53.6119 41.6012 57.1857 44.1474L57.2602 44.2009C59.244 45.6251 61.9413 45.5017 63.7876 43.9022C66.1481 41.8574 69.3784 40.6641 73.8728 40.6641C78.6007 40.6641 82.2664 41.9877 85.1615 44.4399C85.3032 44.565 85.4529 44.6804 85.6095 44.7852C85.9828 45.0361 86.3851 45.2201 86.8008 45.3385C87.4685 45.5297 88.1917 45.5581 88.9131 45.3897C89.2573 45.3098 89.5927 45.1865 89.9105 45.0205C91.0425 44.43 91.8346 43.3592 92.0936 42.1362C92.1977 41.6446 92.2158 41.1284 92.1351 40.6089C92.11 40.4458 92.0755 40.2839 92.0316 40.1243C88.6778 27.0856 83.1951 16.8769 75.274 9.9822C67.2682 3.01361 57.1764 -0.216542 45.3636 0.0112437C33.598 0.238118 23.6515 3.69135 15.8908 10.6589C8.19769 17.5658 3.04596 27.5723 0.128351 40.22C0.0858891 40.3896 0.0541059 40.5612 0.0329156 40.7336C-0.119581 41.9524 0.265853 43.1381 1.02211 44.0226C1.42799 44.4973 1.94069 44.8852 2.53436 45.1449C2.88562 45.2992 3.25231 45.4027 3.62389 45.4562C4.90782 45.6438 6.16179 45.225 7.07105 44.3975ZM45.526 8.49453C55.6217 8.29985 63.5696 11.0258 69.7345 16.392C74.2132 20.2904 77.9585 25.7637 80.855 32.9925C78.6479 32.4468 76.3152 32.1792 73.8728 32.1792C68.7063 32.1792 64.0697 33.3787 60.2067 35.9888C55.8788 33.3384 51.2229 31.9453 46.2913 31.9453C41.2475 31.9453 36.4057 33.4016 31.8104 36.1353C27.375 33.3351 22.3772 31.9453 16.9242 31.9453C14.9552 31.9453 13.0711 32.1287 11.2937 32.5121C13.8983 25.8638 17.3441 20.7387 21.5277 16.9826C27.5059 11.6155 35.3831 8.69011 45.526 8.49453Z" fill="#FFFFFF" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
@ -6,94 +6,98 @@
|
||||
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||
<url>
|
||||
<loc>https://ghostfol.io</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/de/blog</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/de/blog/2021/07/hallo-ghostfolio</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/de/pricing</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/about</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/about/changelog</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2021/07/hello-ghostfolio</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/07/ghostfolio-meets-internet-identity</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/07/how-do-i-get-my-finances-in-order</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/08/500-stars-on-github</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/10/hacktoberfest-2022</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/11/black-friday-2022</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2022/12/the-importance-of-tracking-your-personal-finances</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/blog/2023/02/ghostfolio-meets-umbrel</loc>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/demo</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/faq</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/features</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/markets</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/pricing</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/register</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ghostfol.io/en/resources</loc>
|
||||
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
|
||||
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<target state="translated">Regististrieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -102,7 +102,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -122,7 +122,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -158,7 +158,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -198,7 +202,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -250,7 +254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -342,7 +346,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -382,7 +386,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -414,7 +418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -638,7 +642,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -657,12 +661,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="translated">Letzte Abfrage</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -682,7 +686,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -694,7 +698,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
|
||||
@ -710,7 +714,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -726,7 +730,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -738,7 +742,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -754,11 +758,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -770,7 +774,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
@ -778,7 +782,7 @@
|
||||
<target state="translated">Ich</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
@ -786,7 +790,7 @@
|
||||
<target state="translated">Mein Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
@ -794,7 +798,7 @@
|
||||
<target state="translated">Über Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
@ -802,7 +806,7 @@
|
||||
<target state="translated">Features</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
@ -810,7 +814,7 @@
|
||||
<target state="translated">Märkte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -898,7 +902,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -934,7 +938,7 @@
|
||||
<target state="translated">Einloggen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -1098,7 +1102,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1146,11 +1154,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1158,7 +1166,7 @@
|
||||
<target state="translated">Datenfehler melden</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -1566,7 +1574,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1866,7 +1874,7 @@
|
||||
<target state="translate">Aktivität hinzufügen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1882,7 +1890,7 @@
|
||||
<target state="translated">Name, Symbol oder ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1894,7 +1902,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1906,7 +1914,11 @@
|
||||
<target state="translated">Stückpreis</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1918,11 +1930,11 @@
|
||||
<target state="translated">Gebühr</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1938,7 +1950,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1958,7 +1970,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -2042,7 +2054,7 @@
|
||||
<target state="translated">Weiter mit Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2050,7 +2062,7 @@
|
||||
<target state="translated">Weiter mit Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2174,7 +2186,7 @@
|
||||
<target state="translated">Möchtest du diese Aktivität wirklich löschen?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2246,7 +2258,7 @@
|
||||
<target state="translated">Registrieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4190182554887994764" datatype="html">
|
||||
@ -2342,7 +2354,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="936788a5ab949fe0d70098ba051ac7a44999ff08" datatype="html">
|
||||
@ -2526,7 +2538,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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fbaaeb297e70b9a800acf841b9d26c19d60651ef" datatype="html">
|
||||
@ -2698,7 +2710,7 @@
|
||||
<target state="translated">Symbol</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
@ -2706,7 +2718,7 @@
|
||||
<target state="translated">Tag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
@ -2714,7 +2726,7 @@
|
||||
<target state="translated">Bargeld</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
@ -2722,7 +2734,7 @@
|
||||
<target state="translated">Rohstoff</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
@ -2730,7 +2742,7 @@
|
||||
<target state="translated">Anteilskapital</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
@ -2738,7 +2750,7 @@
|
||||
<target state="translated">Feste Einkünfte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
@ -2746,7 +2758,7 @@
|
||||
<target state="translated">Immobilien</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
@ -2754,7 +2766,7 @@
|
||||
<target state="translated">Anleihe</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
@ -2762,7 +2774,7 @@
|
||||
<target state="translated">Kryptowährung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
@ -2770,7 +2782,7 @@
|
||||
<target state="translated">ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5734784563242233466" datatype="html">
|
||||
@ -2778,7 +2790,7 @@
|
||||
<target state="translated">Investmentfonds</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1270654249046226808" datatype="html">
|
||||
@ -2786,7 +2798,7 @@
|
||||
<target state="translated">Edelmetall</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
@ -2794,7 +2806,7 @@
|
||||
<target state="translated">Privates Beteiligungskapital</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4613338085351943838" datatype="html">
|
||||
@ -2802,7 +2814,7 @@
|
||||
<target state="translated">Aktie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6268646680388419543" datatype="html">
|
||||
@ -2810,7 +2822,7 @@
|
||||
<target state="translated">Notfallfonds</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
@ -2818,7 +2830,7 @@
|
||||
<target state="translated">Andere</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2842,7 +2854,7 @@
|
||||
<target state="translated">Nordamerika</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
@ -2850,7 +2862,7 @@
|
||||
<target state="translated">Afrika</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
@ -2858,7 +2870,7 @@
|
||||
<target state="translated">Asien</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
@ -2866,7 +2878,7 @@
|
||||
<target state="translated">Europa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
@ -2874,7 +2886,7 @@
|
||||
<target state="translated">Ozeanien</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
@ -2882,7 +2894,7 @@
|
||||
<target state="translated">Südamerika</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
|
||||
@ -3006,7 +3018,7 @@
|
||||
<target state="translated">Wertschriften</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -3098,7 +3110,7 @@
|
||||
<target state="translated">Zuwendung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2963674907100579427" datatype="html">
|
||||
@ -3106,7 +3118,7 @@
|
||||
<target state="translated">Höheres Risiko</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
@ -3114,7 +3126,7 @@
|
||||
<target state="translated">Geringeres Risiko</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
@ -3122,7 +3134,7 @@
|
||||
<target state="translated">Altersvorsorge</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8050244774979733855" datatype="html">
|
||||
@ -3130,7 +3142,7 @@
|
||||
<target state="translated">Satellit</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
@ -3186,7 +3198,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
|
||||
@ -3202,7 +3214,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
|
||||
@ -3218,7 +3230,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -3234,7 +3246,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3270,11 +3282,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -3286,11 +3298,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -3302,11 +3314,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
@ -3314,7 +3326,7 @@
|
||||
<target state="translated">Selbst gehostet, manuelles Update.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
@ -3322,11 +3334,11 @@
|
||||
<target state="translated">Kostenlos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
|
||||
@ -3334,7 +3346,7 @@
|
||||
<target state="translated"> Für Einsteiger, die gerade mit dem Börsenhandel beginnen. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
|
||||
@ -3342,11 +3354,11 @@
|
||||
<target state="translated">Vollständig verwaltetes Ghostfolio Cloud-Angebot.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
|
||||
@ -3354,7 +3366,7 @@
|
||||
<target state="translated"> Für ambitionierte Anleger, die den vollständigen Überblick über ihr Anlagevermögen benötigen. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
@ -3362,7 +3374,7 @@
|
||||
<target state="translated"> Abonnement abschliessen </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
@ -3370,7 +3382,7 @@
|
||||
<target state="translated">Einmalige Zahlung, keine automatische Erneuerung.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
@ -3378,7 +3390,7 @@
|
||||
<target state="translated"> Jetzt loslegen </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
@ -3386,7 +3398,7 @@
|
||||
<target state="translated">Es ist kostenlos.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3406,7 +3418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3426,23 +3438,87 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1631940846690193897" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<target state="translated">Einfacher Wechsel zu Ghostfolio Premium</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<target state="translated">Community Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<target state="translated">E-Mail und Chat Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<target state="translated">Einfacher Wechsel zu Ghostfolio Premium oder Ghostfolio Open Source</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<target state="translated">Einfacher Wechsel zu Ghostfolio Open Source</target>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<target state="translated">Einfacher Wechsel zu Ghostfolio Open Source oder Ghostfolio Basic</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<target state="translated">Marktdaten bereitgestellt von</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="translated">Ups! Der historische Wechselkurs konnte nicht abgerufen werden vom</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="46d3a0f17b741c93f9e61aa7157820da41506f53" datatype="html">
|
||||
<source>Target Net Worth</source>
|
||||
<target state="new">Angestrebtes Nettovermögen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="translated">Pensionierungsdatum</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<target state="translated">Crear una cuenta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -103,7 +103,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -123,7 +123,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -159,7 +159,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -199,7 +203,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -251,7 +255,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -343,7 +347,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -383,7 +387,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -415,7 +419,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -639,7 +643,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -658,12 +662,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Última petición</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Última petición</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -683,7 +687,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -695,7 +699,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
|
||||
@ -711,7 +715,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -727,7 +731,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -739,7 +743,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -755,11 +759,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -771,7 +775,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
@ -779,7 +783,7 @@
|
||||
<target state="translated">mí</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
@ -787,7 +791,7 @@
|
||||
<target state="translated">Mi Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
@ -795,7 +799,7 @@
|
||||
<target state="translated">Sobre Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
@ -803,7 +807,7 @@
|
||||
<target state="translated">Funcionalidades</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
@ -811,7 +815,7 @@
|
||||
<target state="translated">Mercados</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -899,7 +903,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -935,7 +939,7 @@
|
||||
<target state="translated">Iniciar sesión</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -1099,7 +1103,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1147,11 +1155,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1159,7 +1167,7 @@
|
||||
<target state="translated">Reporta un anomalía de los datos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -1567,7 +1575,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1867,7 +1875,7 @@
|
||||
<target state="translated">Añadir operación</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1883,7 +1891,7 @@
|
||||
<target state="translated">Nombre, símbolo o ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1895,7 +1903,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1907,7 +1915,11 @@
|
||||
<target state="translated">Precio unitario</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1919,11 +1931,11 @@
|
||||
<target state="translated">Comisión</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1939,7 +1951,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1959,7 +1971,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -2043,7 +2055,7 @@
|
||||
<target state="translated">Continuar con Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2051,7 +2063,7 @@
|
||||
<target state="translated">Continuar con Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2175,7 +2187,7 @@
|
||||
<target state="translated">¿Estás seguro de eliminar esta operación?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2247,7 +2259,7 @@
|
||||
<target state="translated">Comenzar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4190182554887994764" datatype="html">
|
||||
@ -2323,7 +2335,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2527,7 +2539,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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2699,7 +2711,7 @@
|
||||
<target state="translated">Símbolo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
@ -2707,7 +2719,7 @@
|
||||
<target state="translated">Etiqueta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
@ -2715,7 +2727,7 @@
|
||||
<target state="translated">Efectivo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
@ -2723,7 +2735,7 @@
|
||||
<target state="translated">Bien</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
@ -2731,7 +2743,7 @@
|
||||
<target state="translated">Capital</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
@ -2739,7 +2751,7 @@
|
||||
<target state="translated">Renta fija</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
@ -2747,7 +2759,7 @@
|
||||
<target state="translated">Propiedad inmobiliaria</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
@ -2755,7 +2767,7 @@
|
||||
<target state="translated">Bono</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
@ -2763,7 +2775,7 @@
|
||||
<target state="translated">Criptomoneda</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
@ -2771,7 +2783,7 @@
|
||||
<target state="translated">ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5734784563242233466" datatype="html">
|
||||
@ -2779,7 +2791,7 @@
|
||||
<target state="translated">Fondo de inversión</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1270654249046226808" datatype="html">
|
||||
@ -2787,7 +2799,7 @@
|
||||
<target state="translated">Metal precioso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
@ -2795,7 +2807,7 @@
|
||||
<target state="translated">Capital riesgo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4613338085351943838" datatype="html">
|
||||
@ -2803,7 +2815,7 @@
|
||||
<target state="translated">Acción</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6268646680388419543" datatype="html">
|
||||
@ -2811,7 +2823,7 @@
|
||||
<target state="translated">Fondo de emergencia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
@ -2819,7 +2831,7 @@
|
||||
<target state="translated">Otros</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2843,7 +2855,7 @@
|
||||
<target state="translated">América del Norte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
@ -2851,7 +2863,7 @@
|
||||
<target state="translated">África</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
@ -2859,7 +2871,7 @@
|
||||
<target state="translated">Asia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
@ -2867,7 +2879,7 @@
|
||||
<target state="translated">Europa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
@ -2875,7 +2887,7 @@
|
||||
<target state="translated">Oceanía</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
@ -2883,7 +2895,7 @@
|
||||
<target state="translated">América del Sur</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
|
||||
@ -3007,7 +3019,7 @@
|
||||
<target state="new">Securities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -3099,7 +3111,7 @@
|
||||
<target state="new">Grant</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2963674907100579427" datatype="html">
|
||||
@ -3107,7 +3119,7 @@
|
||||
<target state="new">Higher Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
@ -3115,7 +3127,7 @@
|
||||
<target state="new">Lower Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
@ -3123,7 +3135,7 @@
|
||||
<target state="new">Retirement Provision</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8050244774979733855" datatype="html">
|
||||
@ -3131,7 +3143,7 @@
|
||||
<target state="new">Satellite</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
@ -3187,7 +3199,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
|
||||
@ -3203,7 +3215,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
|
||||
@ -3219,7 +3231,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -3235,7 +3247,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3271,11 +3283,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -3287,11 +3299,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -3303,11 +3315,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
@ -3315,7 +3327,7 @@
|
||||
<target state="new">Self-hosted, update manually.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
@ -3323,11 +3335,11 @@
|
||||
<target state="new">Free</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
|
||||
@ -3335,7 +3347,7 @@
|
||||
<target state="new"> For new investors who are just getting started with trading. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
|
||||
@ -3343,11 +3355,11 @@
|
||||
<target state="new">Fully managed Ghostfolio cloud offering.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
|
||||
@ -3355,7 +3367,7 @@
|
||||
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
@ -3363,7 +3375,7 @@
|
||||
<target state="new"> Upgrade Plan </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
@ -3371,7 +3383,7 @@
|
||||
<target state="new">One-time payment, no auto-renewal.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
@ -3379,7 +3391,7 @@
|
||||
<target state="new"> Get Started </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
@ -3387,7 +3399,7 @@
|
||||
<target state="new">It’s free.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3407,7 +3419,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3427,23 +3439,71 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1631940846690193897" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<target state="new">Community Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<target state="new">Email and Chat Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source easily</target>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<target state="new">Market data provided by</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -126,7 +126,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -146,7 +146,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -186,7 +186,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -218,7 +218,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -258,7 +262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -302,7 +306,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -402,7 +406,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -442,7 +446,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -474,7 +478,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4550487415324294802" datatype="html">
|
||||
@ -502,7 +506,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
|
||||
@ -522,7 +526,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -698,7 +702,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
@ -798,11 +802,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="62f17fd50522539fd4c85854828db9d2e1c5330f" datatype="html">
|
||||
@ -886,7 +890,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -910,7 +914,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -925,12 +929,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Dernière Requête</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Dernière Requête</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -994,7 +998,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -1006,7 +1010,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b0f210a3147d1b669e081dae1fcd0918fe7c3021" datatype="html">
|
||||
@ -1018,7 +1022,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -1030,7 +1034,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -1046,11 +1050,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -1062,7 +1066,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
@ -1070,7 +1074,7 @@
|
||||
<target state="translated">Moi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
@ -1078,7 +1082,7 @@
|
||||
<target state="translated">Mon Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
@ -1086,7 +1090,7 @@
|
||||
<target state="translated">À propos de Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
@ -1094,7 +1098,7 @@
|
||||
<target state="translated">Fonctionnalités</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
@ -1102,7 +1106,7 @@
|
||||
<target state="translated">Marchés</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -1114,7 +1118,7 @@
|
||||
<target state="translated">Se connecter</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -1126,7 +1130,7 @@
|
||||
<target state="translated">Démarrer</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1258,7 +1262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -1454,7 +1458,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1506,7 +1514,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1534,7 +1542,7 @@
|
||||
<target state="translated">Signaler une Erreur de Données</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6048892649018070225" datatype="html">
|
||||
@ -2106,7 +2114,7 @@
|
||||
<target state="translated">Ajouter activité</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -2122,7 +2130,7 @@
|
||||
<target state="translated">Nom, symbole, ou ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
|
||||
@ -2130,7 +2138,11 @@
|
||||
<target state="translated">Prix Unitaire</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2142,11 +2154,11 @@
|
||||
<target state="translated">Frais</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2558,7 +2570,7 @@
|
||||
<target state="translated">Creér Compte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -2570,7 +2582,7 @@
|
||||
<target state="translated">Continue avec Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2578,7 +2590,7 @@
|
||||
<target state="translated">Continuer avec Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2710,7 +2722,7 @@
|
||||
<target state="translated">Voulez-vous vraiment supprimer cette activité ?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="303469635941752458" datatype="html">
|
||||
@ -2718,7 +2730,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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2837,7 +2849,7 @@
|
||||
<source>Emergency Fund</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
@ -2845,7 +2857,7 @@
|
||||
<target state="translated">Autre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2857,7 +2869,7 @@
|
||||
<target state="translated">Titres</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8106025670158480144" datatype="html">
|
||||
@ -2865,7 +2877,7 @@
|
||||
<target state="translated">Symbole</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
@ -2873,7 +2885,7 @@
|
||||
<target state="translated">Étiquette</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
@ -2881,7 +2893,7 @@
|
||||
<target state="translated">Cash</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
@ -2889,7 +2901,7 @@
|
||||
<target state="translated">Marchandise</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
@ -2897,7 +2909,7 @@
|
||||
<target state="translated">Capital</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
@ -2905,7 +2917,7 @@
|
||||
<target state="translated">Revenu Fixe</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
@ -2913,7 +2925,7 @@
|
||||
<target state="translated">Immobilier</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
@ -2921,7 +2933,7 @@
|
||||
<target state="translated">Obligation</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
@ -2929,7 +2941,7 @@
|
||||
<target state="translated">Cryptomonnaie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
@ -2937,7 +2949,7 @@
|
||||
<target state="translated">ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5734784563242233466" datatype="html">
|
||||
@ -2945,7 +2957,7 @@
|
||||
<target state="translated">SICAV</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1270654249046226808" datatype="html">
|
||||
@ -2953,7 +2965,7 @@
|
||||
<target state="translated">Métal Précieux</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
@ -2961,7 +2973,7 @@
|
||||
<target state="translated">Capital Propre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4613338085351943838" datatype="html">
|
||||
@ -2969,7 +2981,7 @@
|
||||
<target state="translated">Action</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
@ -2977,7 +2989,7 @@
|
||||
<target state="translated">Afrique</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
@ -2985,7 +2997,7 @@
|
||||
<target state="translated">Asie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
@ -2993,7 +3005,7 @@
|
||||
<target state="translated">Europe</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1228771048078164312" datatype="html">
|
||||
@ -3001,7 +3013,7 @@
|
||||
<target state="translated">Amérique du Nord</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
@ -3009,7 +3021,7 @@
|
||||
<target state="translated">Océanie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
@ -3017,7 +3029,7 @@
|
||||
<target state="translated">Amérique du Sud</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -3097,7 +3109,7 @@
|
||||
<target state="new">Grant</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2963674907100579427" datatype="html">
|
||||
@ -3105,7 +3117,7 @@
|
||||
<target state="new">Higher Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
@ -3113,7 +3125,7 @@
|
||||
<target state="new">Lower Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
@ -3121,7 +3133,7 @@
|
||||
<target state="new">Retirement Provision</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8050244774979733855" datatype="html">
|
||||
@ -3129,7 +3141,7 @@
|
||||
<target state="new">Satellite</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
@ -3185,7 +3197,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
|
||||
@ -3201,7 +3213,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
|
||||
@ -3217,7 +3229,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -3233,7 +3245,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3269,11 +3281,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -3285,11 +3297,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -3301,11 +3313,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
@ -3313,7 +3325,7 @@
|
||||
<target state="new">Self-hosted, update manually.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
@ -3321,11 +3333,11 @@
|
||||
<target state="new">Free</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
|
||||
@ -3333,7 +3345,7 @@
|
||||
<target state="new"> For new investors who are just getting started with trading. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
|
||||
@ -3341,11 +3353,11 @@
|
||||
<target state="new">Fully managed Ghostfolio cloud offering.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
|
||||
@ -3353,7 +3365,7 @@
|
||||
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
@ -3361,7 +3373,7 @@
|
||||
<target state="new"> Upgrade Plan </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
@ -3369,7 +3381,7 @@
|
||||
<target state="new">One-time payment, no auto-renewal.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
@ -3377,7 +3389,7 @@
|
||||
<target state="new"> Get Started </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
@ -3385,7 +3397,7 @@
|
||||
<target state="new">It’s free.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3405,7 +3417,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3425,23 +3437,71 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1631940846690193897" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<target state="new">Community Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<target state="new">Email and Chat Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source easily</target>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<target state="new">Market data provided by</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<target state="translated">Crea un account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -103,7 +103,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -123,7 +123,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -159,7 +159,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -199,7 +203,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -251,7 +255,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -343,7 +347,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -383,7 +387,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -415,7 +419,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -639,7 +643,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -658,12 +662,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Ultima richiesta</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Ultima richiesta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -683,7 +687,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -695,7 +699,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
|
||||
@ -711,7 +715,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -727,7 +731,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -739,7 +743,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -755,11 +759,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -771,7 +775,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
@ -779,7 +783,7 @@
|
||||
<target state="translated">Io</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
@ -787,7 +791,7 @@
|
||||
<target state="translated">Il mio Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
@ -795,7 +799,7 @@
|
||||
<target state="translated">Informazioni su Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
@ -803,7 +807,7 @@
|
||||
<target state="translated">Funzionalità</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
@ -811,7 +815,7 @@
|
||||
<target state="translated">Mercati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -899,7 +903,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -935,7 +939,7 @@
|
||||
<target state="translated">Accedi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -1099,7 +1103,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1147,11 +1155,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1159,7 +1167,7 @@
|
||||
<target state="translated">Segnala un'anomalia dei dati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -1567,7 +1575,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1867,7 +1875,7 @@
|
||||
<target state="translated">Aggiungi un'attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1883,7 +1891,7 @@
|
||||
<target state="translated">Nome, simbolo o ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1895,7 +1903,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1907,7 +1915,11 @@
|
||||
<target state="translated">Prezzo unitario</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1919,11 +1931,11 @@
|
||||
<target state="translated">Commissione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1939,7 +1951,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1959,7 +1971,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -2043,7 +2055,7 @@
|
||||
<target state="translated">Continua con Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2051,7 +2063,7 @@
|
||||
<target state="translated">Continua con Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2175,7 +2187,7 @@
|
||||
<target state="translated">Vuoi davvero eliminare questa attività?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2247,7 +2259,7 @@
|
||||
<target state="translated">Inizia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4190182554887994764" datatype="html">
|
||||
@ -2323,7 +2335,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2527,7 +2539,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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2699,7 +2711,7 @@
|
||||
<target state="new">Symbol</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
@ -2707,7 +2719,7 @@
|
||||
<target state="new">Tag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
@ -2715,7 +2727,7 @@
|
||||
<target state="new">Cash</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
@ -2723,7 +2735,7 @@
|
||||
<target state="new">Commodity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
@ -2731,7 +2743,7 @@
|
||||
<target state="new">Equity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
@ -2739,7 +2751,7 @@
|
||||
<target state="new">Fixed Income</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
@ -2747,7 +2759,7 @@
|
||||
<target state="new">Real Estate</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
@ -2755,7 +2767,7 @@
|
||||
<target state="new">Bond</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
@ -2763,7 +2775,7 @@
|
||||
<target state="new">Cryptocurrency</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
@ -2771,7 +2783,7 @@
|
||||
<target state="new">ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5734784563242233466" datatype="html">
|
||||
@ -2779,7 +2791,7 @@
|
||||
<target state="new">Mutual Fund</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1270654249046226808" datatype="html">
|
||||
@ -2787,7 +2799,7 @@
|
||||
<target state="new">Precious Metal</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
@ -2795,7 +2807,7 @@
|
||||
<target state="new">Private Equity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4613338085351943838" datatype="html">
|
||||
@ -2803,7 +2815,7 @@
|
||||
<target state="new">Stock</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6268646680388419543" datatype="html">
|
||||
@ -2811,7 +2823,7 @@
|
||||
<target state="new">Emergency Fund</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
@ -2819,7 +2831,7 @@
|
||||
<target state="new">Other</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2843,7 +2855,7 @@
|
||||
<target state="new">North America</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
@ -2851,7 +2863,7 @@
|
||||
<target state="new">Africa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
@ -2859,7 +2871,7 @@
|
||||
<target state="new">Asia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
@ -2867,7 +2879,7 @@
|
||||
<target state="new">Europe</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
@ -2875,7 +2887,7 @@
|
||||
<target state="new">Oceania</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
@ -2883,7 +2895,7 @@
|
||||
<target state="new">South America</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
|
||||
@ -3007,7 +3019,7 @@
|
||||
<target state="new">Securities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -3099,7 +3111,7 @@
|
||||
<target state="new">Grant</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2963674907100579427" datatype="html">
|
||||
@ -3107,7 +3119,7 @@
|
||||
<target state="new">Higher Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
@ -3115,7 +3127,7 @@
|
||||
<target state="new">Lower Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
@ -3123,7 +3135,7 @@
|
||||
<target state="new">Retirement Provision</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8050244774979733855" datatype="html">
|
||||
@ -3131,7 +3143,7 @@
|
||||
<target state="new">Satellite</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
@ -3187,7 +3199,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
|
||||
@ -3203,7 +3215,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
|
||||
@ -3219,7 +3231,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -3235,7 +3247,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3271,11 +3283,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -3287,11 +3299,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -3303,11 +3315,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
@ -3315,7 +3327,7 @@
|
||||
<target state="new">Self-hosted, update manually.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
@ -3323,11 +3335,11 @@
|
||||
<target state="new">Free</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
|
||||
@ -3335,7 +3347,7 @@
|
||||
<target state="new"> For new investors who are just getting started with trading. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
|
||||
@ -3343,11 +3355,11 @@
|
||||
<target state="new">Fully managed Ghostfolio cloud offering.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
|
||||
@ -3355,7 +3367,7 @@
|
||||
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
@ -3363,7 +3375,7 @@
|
||||
<target state="new"> Upgrade Plan </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
@ -3371,7 +3383,7 @@
|
||||
<target state="new">One-time payment, no auto-renewal.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
@ -3379,7 +3391,7 @@
|
||||
<target state="new"> Get Started </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
@ -3387,7 +3399,7 @@
|
||||
<target state="new">It’s free.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3407,7 +3419,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3427,23 +3439,71 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1631940846690193897" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<target state="new">Community Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<target state="new">Email and Chat Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source easily</target>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<target state="new">Market data provided by</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<target state="translated">Account aanmaken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -102,7 +102,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -122,7 +122,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -158,7 +158,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -198,7 +202,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -250,7 +254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -342,7 +346,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -382,7 +386,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -414,7 +418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -638,7 +642,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -657,12 +661,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Laatste verzoek</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Laatste verzoek</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -682,7 +686,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -694,7 +698,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
|
||||
@ -710,7 +714,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -726,7 +730,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -738,7 +742,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -754,11 +758,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -770,7 +774,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
@ -778,7 +782,7 @@
|
||||
<target state="translated">Ik</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
@ -786,7 +790,7 @@
|
||||
<target state="translated">Mijn Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
@ -794,7 +798,7 @@
|
||||
<target state="translated">Over Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
@ -802,7 +806,7 @@
|
||||
<target state="translated">Kenmerken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
@ -810,7 +814,7 @@
|
||||
<target state="translated">Markten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -898,7 +902,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -934,7 +938,7 @@
|
||||
<target state="translated">Aanmelden</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -1098,7 +1102,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1146,11 +1154,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1158,7 +1166,7 @@
|
||||
<target state="translated">Gegevensstoring melden</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -1566,7 +1574,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1866,7 +1874,7 @@
|
||||
<target state="translated">Activiteit toevoegen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1882,7 +1890,7 @@
|
||||
<target state="translated">Naam, symbool of ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1894,7 +1902,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1906,7 +1914,11 @@
|
||||
<target state="translated">Prijs per eenheid</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1918,11 +1930,11 @@
|
||||
<target state="translated">Transactiekosten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1938,7 +1950,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1958,7 +1970,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -2042,7 +2054,7 @@
|
||||
<target state="translated">Ga verder met Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2050,7 +2062,7 @@
|
||||
<target state="translated">Verder met Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2174,7 +2186,7 @@
|
||||
<target state="translated">Wilt u deze activiteit echt verwijderen?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2246,7 +2258,7 @@
|
||||
<target state="translated">Aan de slag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4190182554887994764" datatype="html">
|
||||
@ -2322,7 +2334,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2422,7 +2434,7 @@
|
||||
<target state="translated">Verwacht totaalbedrag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2526,7 +2538,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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2698,7 +2710,7 @@
|
||||
<target state="translated">Symbool</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
@ -2706,7 +2718,7 @@
|
||||
<target state="translated">Label</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
@ -2714,7 +2726,7 @@
|
||||
<target state="translated">Contant geld</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
@ -2722,7 +2734,7 @@
|
||||
<target state="translated">Commodity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
@ -2730,7 +2742,7 @@
|
||||
<target state="translated">Equity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
@ -2738,7 +2750,7 @@
|
||||
<target state="translated">Vast inkomen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
@ -2746,7 +2758,7 @@
|
||||
<target state="translated">Vastgoed</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
@ -2754,7 +2766,7 @@
|
||||
<target state="translated">Obligatie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
@ -2762,7 +2774,7 @@
|
||||
<target state="translated">Cryptovaluta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
@ -2770,7 +2782,7 @@
|
||||
<target state="translated">ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5734784563242233466" datatype="html">
|
||||
@ -2778,7 +2790,7 @@
|
||||
<target state="translated">Beleggingsfonds</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1270654249046226808" datatype="html">
|
||||
@ -2786,7 +2798,7 @@
|
||||
<target state="translated">Edel metaal</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
@ -2794,7 +2806,7 @@
|
||||
<target state="translated">Private equity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4613338085351943838" datatype="html">
|
||||
@ -2802,7 +2814,7 @@
|
||||
<target state="translated">Aandeel</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6268646680388419543" datatype="html">
|
||||
@ -2810,7 +2822,7 @@
|
||||
<target state="translated">Noodfonds</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
@ -2818,7 +2830,7 @@
|
||||
<target state="translated">Anders</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2842,7 +2854,7 @@
|
||||
<target state="translated">Noord Amerika</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
@ -2850,7 +2862,7 @@
|
||||
<target state="translated">Afrika</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
@ -2858,7 +2870,7 @@
|
||||
<target state="translated">Azië</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
@ -2866,7 +2878,7 @@
|
||||
<target state="translated">Europa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
@ -2874,7 +2886,7 @@
|
||||
<target state="translated">Oceanië</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
@ -2882,7 +2894,7 @@
|
||||
<target state="translated">Zuid Amerika</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
|
||||
@ -3006,7 +3018,7 @@
|
||||
<target state="translated">Effecten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -3098,7 +3110,7 @@
|
||||
<target state="new">Grant</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2963674907100579427" datatype="html">
|
||||
@ -3106,7 +3118,7 @@
|
||||
<target state="new">Higher Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
@ -3114,7 +3126,7 @@
|
||||
<target state="new">Lower Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
@ -3122,7 +3134,7 @@
|
||||
<target state="new">Retirement Provision</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8050244774979733855" datatype="html">
|
||||
@ -3130,7 +3142,7 @@
|
||||
<target state="new">Satellite</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
@ -3186,7 +3198,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
|
||||
@ -3202,7 +3214,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
|
||||
@ -3218,7 +3230,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -3234,7 +3246,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3270,11 +3282,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -3286,11 +3298,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -3302,11 +3314,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
@ -3314,7 +3326,7 @@
|
||||
<target state="new">Self-hosted, update manually.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
@ -3322,11 +3334,11 @@
|
||||
<target state="new">Free</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
|
||||
@ -3334,7 +3346,7 @@
|
||||
<target state="new"> For new investors who are just getting started with trading. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
|
||||
@ -3342,11 +3354,11 @@
|
||||
<target state="new">Fully managed Ghostfolio cloud offering.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
|
||||
@ -3354,7 +3366,7 @@
|
||||
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
@ -3362,7 +3374,7 @@
|
||||
<target state="new"> Upgrade Plan </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
@ -3370,7 +3382,7 @@
|
||||
<target state="new">One-time payment, no auto-renewal.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
@ -3378,7 +3390,7 @@
|
||||
<target state="new"> Get Started </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
@ -3386,7 +3398,7 @@
|
||||
<target state="new">It’s free.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3406,7 +3418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3426,23 +3438,87 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1631940846690193897" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<target state="new">Community Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<target state="new">Email and Chat Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source easily</target>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<target state="new">Market data provided by</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="46d3a0f17b741c93f9e61aa7157820da41506f53" datatype="html">
|
||||
<source>Target Net Worth</source>
|
||||
<target state="translated">Beoogd Netto Vermogen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="translated">Pensioen Datum</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -126,7 +126,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -146,7 +146,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -186,7 +186,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -218,7 +218,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -258,7 +262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -302,7 +306,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -402,7 +406,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -442,7 +446,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -474,7 +478,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4550487415324294802" datatype="html">
|
||||
@ -502,7 +506,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
|
||||
@ -522,7 +526,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -770,7 +774,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -794,7 +798,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -809,12 +813,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="new">Last Request</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new"> Last Request </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -878,7 +882,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -890,7 +894,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b0f210a3147d1b669e081dae1fcd0918fe7c3021" datatype="html">
|
||||
@ -902,7 +906,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -914,7 +918,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -930,11 +934,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -946,7 +950,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
@ -954,7 +958,7 @@
|
||||
<target state="new">Me</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
@ -962,7 +966,7 @@
|
||||
<target state="new">My Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
@ -970,7 +974,7 @@
|
||||
<target state="new">About Ghostfolio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
@ -978,7 +982,7 @@
|
||||
<target state="new">Features</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
@ -986,7 +990,7 @@
|
||||
<target state="new">Markets</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -998,7 +1002,7 @@
|
||||
<target state="new">Sign in</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -1010,7 +1014,7 @@
|
||||
<target state="new">Get started</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5207635742003539443" datatype="html">
|
||||
@ -1158,7 +1162,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -1354,7 +1358,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1406,7 +1414,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1494,11 +1502,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1506,7 +1514,7 @@
|
||||
<target state="new">Report Data Glitch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -2046,7 +2054,7 @@
|
||||
<target state="new">Add activity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -2070,7 +2078,7 @@
|
||||
<target state="new">Name, symbol or ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
|
||||
@ -2078,7 +2086,11 @@
|
||||
<target state="new">Unit Price</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2090,11 +2102,11 @@
|
||||
<target state="new">Fee</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2110,7 +2122,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="848497846891931418" datatype="html">
|
||||
@ -2482,7 +2494,7 @@
|
||||
<target state="new">Create Account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -2494,7 +2506,7 @@
|
||||
<target state="new">Continue with Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2502,7 +2514,7 @@
|
||||
<target state="new">Continue with Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2626,7 +2638,7 @@
|
||||
<target state="new">Do you really want to delete this activity?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="303469635941752458" datatype="html">
|
||||
@ -2634,7 +2646,7 @@
|
||||
<target state="new">Filter by account, currency, symbol or 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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2730,7 +2742,7 @@
|
||||
<target state="new">Emergency Fund</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
@ -2738,7 +2750,7 @@
|
||||
<target state="new">Other</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2750,7 +2762,7 @@
|
||||
<target state="new">Symbol</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
@ -2758,7 +2770,7 @@
|
||||
<target state="new">Tag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
@ -2766,7 +2778,7 @@
|
||||
<target state="new">Cash</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
@ -2774,7 +2786,7 @@
|
||||
<target state="new">Commodity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
@ -2782,7 +2794,7 @@
|
||||
<target state="new">Equity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
@ -2790,7 +2802,7 @@
|
||||
<target state="new">Fixed Income</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
@ -2798,7 +2810,7 @@
|
||||
<target state="new">Real Estate</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
@ -2806,7 +2818,7 @@
|
||||
<target state="new">Bond</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
@ -2814,7 +2826,7 @@
|
||||
<target state="new">Cryptocurrency</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
@ -2822,7 +2834,7 @@
|
||||
<target state="new">ETF</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5734784563242233466" datatype="html">
|
||||
@ -2830,7 +2842,7 @@
|
||||
<target state="new">Mutual Fund</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1270654249046226808" datatype="html">
|
||||
@ -2838,7 +2850,7 @@
|
||||
<target state="new">Precious Metal</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
@ -2846,7 +2858,7 @@
|
||||
<target state="new">Private Equity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4613338085351943838" datatype="html">
|
||||
@ -2854,7 +2866,7 @@
|
||||
<target state="new">Stock</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
@ -2862,7 +2874,7 @@
|
||||
<target state="new">Africa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
@ -2870,7 +2882,7 @@
|
||||
<target state="new">Asia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
@ -2878,7 +2890,7 @@
|
||||
<target state="new">Europe</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1228771048078164312" datatype="html">
|
||||
@ -2886,7 +2898,7 @@
|
||||
<target state="new">North America</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
@ -2894,7 +2906,7 @@
|
||||
<target state="new">Oceania</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
@ -2902,7 +2914,7 @@
|
||||
<target state="new">South America</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -3038,7 +3050,7 @@
|
||||
<target state="new">Securities</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0f845001c88b82c18535e6d44f5597061f506e42" datatype="html">
|
||||
@ -3098,7 +3110,7 @@
|
||||
<target state="new">Grant</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2963674907100579427" datatype="html">
|
||||
@ -3106,7 +3118,7 @@
|
||||
<target state="new">Higher Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
@ -3114,7 +3126,7 @@
|
||||
<target state="new">Lower Risk</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
@ -3122,7 +3134,7 @@
|
||||
<target state="new">Retirement Provision</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8050244774979733855" datatype="html">
|
||||
@ -3130,7 +3142,7 @@
|
||||
<target state="new">Satellite</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
|
||||
@ -3186,7 +3198,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
|
||||
@ -3202,7 +3214,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
|
||||
@ -3218,7 +3230,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -3234,7 +3246,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3270,11 +3282,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -3286,11 +3298,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -3302,11 +3314,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
@ -3314,7 +3326,7 @@
|
||||
<target state="new">Self-hosted, update manually.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
@ -3322,11 +3334,11 @@
|
||||
<target state="new">Free</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
|
||||
@ -3334,7 +3346,7 @@
|
||||
<target state="new"> For new investors who are just getting started with trading. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
|
||||
@ -3342,11 +3354,11 @@
|
||||
<target state="new">Fully managed Ghostfolio cloud offering.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
|
||||
@ -3354,7 +3366,7 @@
|
||||
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
@ -3362,7 +3374,7 @@
|
||||
<target state="new"> Upgrade Plan </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
@ -3370,7 +3382,7 @@
|
||||
<target state="new">One-time payment, no auto-renewal.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
@ -3378,7 +3390,7 @@
|
||||
<target state="new"> Get Started </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
@ -3386,7 +3398,7 @@
|
||||
<target state="new">It’s free.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3406,7 +3418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3426,23 +3438,71 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1631940846690193897" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<target state="new">Community Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<target state="new">Email and Chat Support</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source easily</target>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<target state="new">Market data provided by</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<source>Create Account</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26,28</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -95,7 +95,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
|
||||
@ -114,7 +114,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">72,74</context>
|
||||
<context context-type="linenumber">77,79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -148,7 +148,11 @@
|
||||
</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">119,120</context>
|
||||
<context context-type="linenumber">124,125</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">171,172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -186,7 +190,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -234,7 +238,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">88,90</context>
|
||||
<context context-type="linenumber">93,95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -315,7 +319,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">94,95</context>
|
||||
<context context-type="linenumber">99,100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -353,7 +357,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">250,254</context>
|
||||
<context context-type="linenumber">302,306</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
@ -384,7 +388,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">257,262</context>
|
||||
<context context-type="linenumber">309,314</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -583,7 +587,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
|
||||
@ -600,11 +604,11 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -622,7 +626,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
|
||||
@ -633,7 +637,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">162</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
|
||||
@ -648,7 +652,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
|
||||
@ -663,7 +667,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">192</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
|
||||
@ -674,7 +678,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">203</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
|
||||
@ -689,11 +693,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
<context context-type="linenumber">208</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">265</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
@ -704,42 +708,42 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">254</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
|
||||
<source>Me</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">127</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
|
||||
<source>My Ghostfolio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
|
||||
<source>About Ghostfolio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
<context context-type="linenumber">216</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
|
||||
<source>Features</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
|
||||
<source>Markets</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
|
||||
@ -819,7 +823,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,31</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -851,7 +855,7 @@
|
||||
<source>Sign in</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
<context context-type="linenumber">286</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
@ -998,7 +1002,11 @@
|
||||
</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">117,119</context>
|
||||
<context context-type="linenumber">122,124</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">169,171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1042,18 +1050,18 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
<context context-type="linenumber">259</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">209,211</context>
|
||||
<context context-type="linenumber">261,263</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
<source>Report Data Glitch</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -1415,7 +1423,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">78,80</context>
|
||||
<context context-type="linenumber">83,85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1682,7 +1690,7 @@
|
||||
<source>Add activity</source>
|
||||
<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,11</context>
|
||||
<context context-type="linenumber">8,10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1696,7 +1704,7 @@
|
||||
<source>Name, symbol or ISIN</source>
|
||||
<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">39,42</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1707,7 +1715,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">108,109</context>
|
||||
<context context-type="linenumber">113,114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1718,7 +1726,11 @@
|
||||
<source>Unit Price</source>
|
||||
<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">120,123</context>
|
||||
<context context-type="linenumber">125,128</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">172,175</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1729,11 +1741,11 @@
|
||||
<source>Fee</source>
|
||||
<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">141,142</context>
|
||||
<context context-type="linenumber">183,184</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">158,159</context>
|
||||
<context context-type="linenumber">208,209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1748,7 +1760,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">167,170</context>
|
||||
<context context-type="linenumber">217,220</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1767,7 +1779,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">181,183</context>
|
||||
<context context-type="linenumber">232,234</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -1841,14 +1853,14 @@
|
||||
<source>Continue with Internet Identity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40,43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
<source>Continue with Google</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50,55</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -1958,7 +1970,7 @@
|
||||
<source>Do you really want to delete this activity?</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
|
||||
@ -2021,7 +2033,7 @@
|
||||
<source>Get started</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
|
||||
<context context-type="linenumber">300</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4190182554887994764" datatype="html">
|
||||
@ -2091,7 +2103,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">196,198</context>
|
||||
<context context-type="linenumber">248,250</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2181,7 +2193,7 @@
|
||||
<source>Projected Total Amount</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2274,7 +2286,7 @@
|
||||
<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">389</context>
|
||||
<context context-type="linenumber">390</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
|
||||
@ -2411,35 +2423,35 @@
|
||||
<source>Precious Metal</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1825829511397926879" datatype="html">
|
||||
<source>Tag</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1983771552391474467" datatype="html">
|
||||
<source>Equity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8432027249343784512" datatype="html">
|
||||
<source>Real Estate</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2893204435511484886" datatype="html">
|
||||
<source>Cryptocurrency</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4086606389696938932" datatype="html">
|
||||
@ -2453,14 +2465,14 @@
|
||||
<source>Stock</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1346519036036997811" datatype="html">
|
||||
<source>Private Equity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4574987680940794089" datatype="html">
|
||||
@ -2474,49 +2486,49 @@
|
||||
<source>Mutual Fund</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="787798817533231355" datatype="html">
|
||||
<source>Cash</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8106025670158480144" datatype="html">
|
||||
<source>Symbol</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8431989971855844965" datatype="html">
|
||||
<source>Commodity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8977365084844053365" datatype="html">
|
||||
<source>Bond</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9071695492820527473" datatype="html">
|
||||
<source>ETF</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6124744839836623630" datatype="html">
|
||||
<source>Fixed Income</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4893616715766810081" datatype="html">
|
||||
@ -2534,14 +2546,14 @@
|
||||
<source>Emergency Fund</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8693603235657020323" datatype="html">
|
||||
<source>Other</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
|
||||
@ -2552,42 +2564,42 @@
|
||||
<source>North America</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1413778527796351850" datatype="html">
|
||||
<source>Africa</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3228811828827738441" datatype="html">
|
||||
<source>Oceania</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3345512471687795386" datatype="html">
|
||||
<source>Asia</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5957846001261659229" datatype="html">
|
||||
<source>South America</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8350109327144196614" datatype="html">
|
||||
<source>Europe</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2683,7 +2695,7 @@
|
||||
<source>Securities</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8763985977445247551" datatype="html">
|
||||
@ -2764,21 +2776,21 @@
|
||||
<source>Higher Risk</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4152514811781104574" datatype="html">
|
||||
<source>Lower Risk</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5036857680734170026" datatype="html">
|
||||
<source>Grant</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7027401708987643293" datatype="html">
|
||||
@ -2792,14 +2804,14 @@
|
||||
<source>Satellite</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9219851060664514927" datatype="html">
|
||||
<source>Retirement Provision</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d82473cef3cd2258eab20223ffcdd5af0c0025cc" datatype="html">
|
||||
@ -2841,25 +2853,25 @@
|
||||
<source> For ambitious investors who need the full picture of their financial assets. </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">224,227</context>
|
||||
<context context-type="linenumber">215,218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
|
||||
<source>Free</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
|
||||
<source> Upgrade Plan </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">327,329</context>
|
||||
<context context-type="linenumber">325,327</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="435445e728dcf7fdf68fbae0e55e83f61591ac87" datatype="html">
|
||||
@ -2870,18 +2882,18 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">145</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">234</context>
|
||||
<context context-type="linenumber">225</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
|
||||
<source>Self-hosted, update manually.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5472874dceac367df728fadcbb0757a3477935dc" datatype="html">
|
||||
@ -2903,7 +2915,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
|
||||
@ -2914,11 +2926,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">166</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">239</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6dcab4069ec74eb21b38bd9f9678dc957c99618c" datatype="html">
|
||||
@ -2940,7 +2952,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
|
||||
@ -2951,11 +2963,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
<context context-type="linenumber">232</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9acb9343578075b93d3276a60f2a0bc8f89cccd2" datatype="html">
|
||||
@ -2969,21 +2981,21 @@
|
||||
<source> For new investors who are just getting started with trading. </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">136,138</context>
|
||||
<context context-type="linenumber">143,145</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
|
||||
<source>It’s free.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">342</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
|
||||
<source>One-time payment, no auto-renewal.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
|
||||
@ -2998,14 +3010,14 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
|
||||
<source> Get Started </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">341,343</context>
|
||||
<context context-type="linenumber">339,341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cb10143b41a58e68b0e5e8de3ab8aeb570fdaf88" datatype="html">
|
||||
@ -3020,7 +3032,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">246</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
|
||||
@ -3034,11 +3046,11 @@
|
||||
<source>Fully managed Ghostfolio cloud offering.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">301</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
|
||||
@ -3056,7 +3068,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
<context context-type="linenumber">253</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
|
||||
@ -3070,7 +3082,7 @@
|
||||
<source>Switch to Ghostfolio Premium easily</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4ed0cb02583e008888e614de4032f41d8abfc37e" datatype="html">
|
||||
@ -3081,14 +3093,71 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="921762941409901000" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source easily</source>
|
||||
<trans-unit id="1921273115613254799" datatype="html">
|
||||
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3298117765569632011" datatype="html">
|
||||
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
|
||||
<source>Community Support</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
|
||||
<source>Email and Chat Support</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
|
||||
<source>Market data provided by</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<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">147,149</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">199,201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="46d3a0f17b741c93f9e61aa7157820da41506f53" datatype="html">
|
||||
<source>Target Net Worth</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
|
@ -227,7 +227,7 @@ body {
|
||||
}
|
||||
|
||||
ngx-skeleton-loader {
|
||||
.loader {
|
||||
.skeleton-loader {
|
||||
background-color: #323232;
|
||||
}
|
||||
}
|
||||
@ -256,10 +256,27 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-card {
|
||||
--mdc-elevated-card-container-color: var(--dark-background);
|
||||
}
|
||||
|
||||
.mat-mdc-fab {
|
||||
&.mat-primary {
|
||||
--mdc-fab-icon-color: rgba(var(--dark-primary-text));
|
||||
--mat-mdc-fab-color: rgba(var(--dark-primary-text));
|
||||
}
|
||||
}
|
||||
|
||||
.mat-paginator {
|
||||
background-color: rgba(var(--palette-foreground-base-dark), 0.02);
|
||||
}
|
||||
|
||||
.mdc-button {
|
||||
&.mat-primary {
|
||||
--mdc-filled-button-label-text-color: rgba(var(--dark-primary-text));
|
||||
}
|
||||
}
|
||||
|
||||
.svgMap-tooltip {
|
||||
background: var(--dark-background);
|
||||
|
||||
@ -302,7 +319,7 @@ ngx-skeleton-loader {
|
||||
line-height: 0;
|
||||
outline: 0;
|
||||
|
||||
.loader {
|
||||
.skeleton-loader {
|
||||
display: flex;
|
||||
margin: 0 !important;
|
||||
outline: 0;
|
||||
@ -336,6 +353,10 @@ ngx-skeleton-loader {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.line-height-1 {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.lead {
|
||||
font-weight: unset;
|
||||
}
|
||||
@ -394,6 +415,24 @@ ngx-skeleton-loader {
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-fab {
|
||||
color: var(--mat-mdc-fab-color, inherit) !important;
|
||||
|
||||
&.mat-primary {
|
||||
--mdc-fab-icon-color: rgba(var(--light-primary-text));
|
||||
--mat-mdc-fab-color: rgba(var(--light-primary-text));
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-menu-panel {
|
||||
.mat-mdc-menu-item {
|
||||
.mdc-list-item__primary-text {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mat-paginator {
|
||||
background-color: rgba(var(--palette-foreground-base-light), 0.02);
|
||||
|
||||
@ -402,6 +441,12 @@ ngx-skeleton-loader {
|
||||
}
|
||||
}
|
||||
|
||||
.mdc-button {
|
||||
&.mat-primary {
|
||||
--mdc-filled-button-label-text-color: rgba(var(--light-primary-text));
|
||||
}
|
||||
}
|
||||
|
||||
.no-min-width {
|
||||
min-width: unset !important;
|
||||
}
|
||||
|
@ -69,6 +69,8 @@ $gf-secondary: (
|
||||
)
|
||||
);
|
||||
|
||||
$gf-typography: mat.define-typography-config();
|
||||
|
||||
@include mat.core();
|
||||
@include mat.legacy-core();
|
||||
|
||||
@ -80,7 +82,7 @@ $gf-theme-default: mat.define-light-theme(
|
||||
accent: mat.define-palette($gf-secondary, 500, 900, A100)
|
||||
),
|
||||
density: 0,
|
||||
typography: mat.define-typography-config()
|
||||
typography: $gf-typography
|
||||
)
|
||||
);
|
||||
@include mat.all-component-themes($gf-theme-default);
|
||||
@ -94,7 +96,7 @@ $gf-theme-dark: mat.define-dark-theme(
|
||||
accent: mat.define-palette($gf-secondary, 500, 900, A100)
|
||||
),
|
||||
density: 0,
|
||||
typography: mat.define-typography-config()
|
||||
typography: $gf-typography
|
||||
)
|
||||
);
|
||||
.is-dark-theme {
|
||||
@ -107,4 +109,6 @@ $gf-theme-dark: mat.define-dark-theme(
|
||||
--gf-theme-primary-500-rgb: 0, 187, 255;
|
||||
--gf-theme-secondary-500: #3686cf;
|
||||
--gf-theme-secondary-500-rgb: 78, 208, 94;
|
||||
|
||||
--mdc-typography-button-letter-spacing: normal;
|
||||
}
|
||||
|
@ -2,8 +2,6 @@ import { DataSource } from '@prisma/client';
|
||||
import { JobOptions, JobStatus } from 'bull';
|
||||
import ms from 'ms';
|
||||
|
||||
export const DEMO_USER_ID = '9b112b4d-3b7d-4bad-9bdd-3b0f7b4dac2f';
|
||||
|
||||
export const ghostfolioPrefix = 'GF';
|
||||
export const ghostfolioScraperApiSymbolPrefix = `_${ghostfolioPrefix}_`;
|
||||
export const ghostfolioCashSymbol = `${ghostfolioScraperApiSymbolPrefix}CASH`;
|
||||
@ -69,12 +67,17 @@ export const GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS: JobOptions = {
|
||||
}
|
||||
};
|
||||
|
||||
export const HEADER_KEY_IMPERSONATION = 'Impersonation-Id';
|
||||
export const HEADER_KEY_TIMEZONE = 'Timezone';
|
||||
export const HEADER_KEY_TOKEN = 'Authorization';
|
||||
|
||||
export const MAX_CHART_ITEMS = 365;
|
||||
|
||||
export const PROPERTY_BENCHMARKS = 'BENCHMARKS';
|
||||
export const PROPERTY_COUNTRIES_OF_SUBSCRIBERS = 'COUNTRIES_OF_SUBSCRIBERS';
|
||||
export const PROPERTY_COUPONS = 'COUPONS';
|
||||
export const PROPERTY_CURRENCIES = 'CURRENCIES';
|
||||
export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
|
||||
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
|
||||
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
|
||||
export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS';
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user