Feature/set up Ghostfolio data provider (#4016)
* Set up Ghostfolio data provider * Update translations * Update changelog
This commit is contained in:
parent
0bc52fd80e
commit
5f98dfa5d6
@ -11,10 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- Added pagination parameters (`skip`, `take`) to the endpoint `GET api/v1/admin/user`
|
- Added pagination parameters (`skip`, `take`) to the endpoint `GET api/v1/admin/user`
|
||||||
- Added pagination response (`count`) to the endpoint `GET api/v1/admin/user`
|
- Added pagination response (`count`) to the endpoint `GET api/v1/admin/user`
|
||||||
|
- Added `GHOSTFOLIO` as a new data source type
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Extended the allocations by ETF holding on the allocations page by the parent ETFs (experimental)
|
- Extended the allocations by ETF holding on the allocations page by the parent ETFs (experimental)
|
||||||
|
- Improved the language localization for German (`de`)
|
||||||
- Upgraded `countries-and-timezones` from version `3.4.1` to `3.7.2`
|
- Upgraded `countries-and-timezones` from version `3.4.1` to `3.7.2`
|
||||||
- Upgraded `Nx` from version `20.0.6` to `20.1.2`
|
- Upgraded `Nx` from version `20.0.6` to `20.1.2`
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ import { AuthDeviceModule } from './auth-device/auth-device.module';
|
|||||||
import { AuthModule } from './auth/auth.module';
|
import { AuthModule } from './auth/auth.module';
|
||||||
import { BenchmarkModule } from './benchmark/benchmark.module';
|
import { BenchmarkModule } from './benchmark/benchmark.module';
|
||||||
import { CacheModule } from './cache/cache.module';
|
import { CacheModule } from './cache/cache.module';
|
||||||
|
import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module';
|
||||||
import { PublicModule } from './endpoints/public/public.module';
|
import { PublicModule } from './endpoints/public/public.module';
|
||||||
import { ExchangeRateModule } from './exchange-rate/exchange-rate.module';
|
import { ExchangeRateModule } from './exchange-rate/exchange-rate.module';
|
||||||
import { ExportModule } from './export/export.module';
|
import { ExportModule } from './export/export.module';
|
||||||
@ -76,6 +77,7 @@ import { UserModule } from './user/user.module';
|
|||||||
ExchangeRateModule,
|
ExchangeRateModule,
|
||||||
ExchangeRateDataModule,
|
ExchangeRateDataModule,
|
||||||
ExportModule,
|
ExportModule,
|
||||||
|
GhostfolioModule,
|
||||||
HealthModule,
|
HealthModule,
|
||||||
ImportModule,
|
ImportModule,
|
||||||
InfoModule,
|
InfoModule,
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
import { Granularity } from '@ghostfolio/common/types';
|
||||||
|
|
||||||
|
import { IsIn, IsISO8601, IsOptional } from 'class-validator';
|
||||||
|
|
||||||
|
export class GetHistoricalDto {
|
||||||
|
@IsISO8601()
|
||||||
|
from: string;
|
||||||
|
|
||||||
|
@IsIn(['day', 'month'] as Granularity[])
|
||||||
|
@IsOptional()
|
||||||
|
granularity: Granularity;
|
||||||
|
|
||||||
|
@IsISO8601()
|
||||||
|
to: string;
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Transform } from 'class-transformer';
|
||||||
|
import { IsString } from 'class-validator';
|
||||||
|
|
||||||
|
export class GetQuotesDto {
|
||||||
|
@IsString({ each: true })
|
||||||
|
@Transform(({ value }) =>
|
||||||
|
typeof value === 'string' ? value.split(',') : value
|
||||||
|
)
|
||||||
|
symbols: string[];
|
||||||
|
}
|
@ -0,0 +1,158 @@
|
|||||||
|
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
|
||||||
|
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
|
||||||
|
import { parseDate } from '@ghostfolio/common/helper';
|
||||||
|
import {
|
||||||
|
DataProviderGhostfolioStatusResponse,
|
||||||
|
HistoricalResponse,
|
||||||
|
LookupResponse,
|
||||||
|
QuotesResponse
|
||||||
|
} from '@ghostfolio/common/interfaces';
|
||||||
|
import { permissions } from '@ghostfolio/common/permissions';
|
||||||
|
import { RequestWithUser } from '@ghostfolio/common/types';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Controller,
|
||||||
|
Get,
|
||||||
|
HttpException,
|
||||||
|
Inject,
|
||||||
|
Param,
|
||||||
|
Query,
|
||||||
|
UseGuards
|
||||||
|
} from '@nestjs/common';
|
||||||
|
import { REQUEST } from '@nestjs/core';
|
||||||
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
|
import { getReasonPhrase, StatusCodes } from 'http-status-codes';
|
||||||
|
|
||||||
|
import { GetHistoricalDto } from './get-historical.dto';
|
||||||
|
import { GetQuotesDto } from './get-quotes.dto';
|
||||||
|
import { GhostfolioService } from './ghostfolio.service';
|
||||||
|
|
||||||
|
@Controller('data-providers/ghostfolio')
|
||||||
|
export class GhostfolioController {
|
||||||
|
public constructor(
|
||||||
|
private readonly ghostfolioService: GhostfolioService,
|
||||||
|
@Inject(REQUEST) private readonly request: RequestWithUser
|
||||||
|
) {}
|
||||||
|
|
||||||
|
@Get('historical/:symbol')
|
||||||
|
@HasPermission(permissions.enableDataProviderGhostfolio)
|
||||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
|
||||||
|
public async getHistorical(
|
||||||
|
@Param('symbol') symbol: string,
|
||||||
|
@Query() query: GetHistoricalDto
|
||||||
|
): Promise<HistoricalResponse> {
|
||||||
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
|
||||||
|
|
||||||
|
if (
|
||||||
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
|
||||||
|
) {
|
||||||
|
throw new HttpException(
|
||||||
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
|
||||||
|
StatusCodes.TOO_MANY_REQUESTS
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const historicalData = await this.ghostfolioService.getHistorical({
|
||||||
|
symbol,
|
||||||
|
from: parseDate(query.from),
|
||||||
|
granularity: query.granularity,
|
||||||
|
to: parseDate(query.to)
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.ghostfolioService.incrementDailyRequests({
|
||||||
|
userId: this.request.user.id
|
||||||
|
});
|
||||||
|
|
||||||
|
return historicalData;
|
||||||
|
} catch {
|
||||||
|
throw new HttpException(
|
||||||
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('lookup')
|
||||||
|
@HasPermission(permissions.enableDataProviderGhostfolio)
|
||||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
|
||||||
|
public async lookupSymbol(
|
||||||
|
@Query('includeIndices') includeIndicesParam = 'false',
|
||||||
|
@Query('query') query = ''
|
||||||
|
): Promise<LookupResponse> {
|
||||||
|
const includeIndices = includeIndicesParam === 'true';
|
||||||
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
|
||||||
|
|
||||||
|
if (
|
||||||
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
|
||||||
|
) {
|
||||||
|
throw new HttpException(
|
||||||
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
|
||||||
|
StatusCodes.TOO_MANY_REQUESTS
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await this.ghostfolioService.lookup({
|
||||||
|
includeIndices,
|
||||||
|
query: query.toLowerCase()
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.ghostfolioService.incrementDailyRequests({
|
||||||
|
userId: this.request.user.id
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch {
|
||||||
|
throw new HttpException(
|
||||||
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('quotes')
|
||||||
|
@HasPermission(permissions.enableDataProviderGhostfolio)
|
||||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
|
||||||
|
public async getQuotes(
|
||||||
|
@Query() query: GetQuotesDto
|
||||||
|
): Promise<QuotesResponse> {
|
||||||
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
|
||||||
|
|
||||||
|
if (
|
||||||
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
|
||||||
|
) {
|
||||||
|
throw new HttpException(
|
||||||
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
|
||||||
|
StatusCodes.TOO_MANY_REQUESTS
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const quotes = await this.ghostfolioService.getQuotes({
|
||||||
|
symbols: query.symbols
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.ghostfolioService.incrementDailyRequests({
|
||||||
|
userId: this.request.user.id
|
||||||
|
});
|
||||||
|
|
||||||
|
return quotes;
|
||||||
|
} catch {
|
||||||
|
throw new HttpException(
|
||||||
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('status')
|
||||||
|
@HasPermission(permissions.enableDataProviderGhostfolio)
|
||||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
|
||||||
|
public async getStatus(): Promise<DataProviderGhostfolioStatusResponse> {
|
||||||
|
return {
|
||||||
|
dailyRequests: this.request.user.dataProviderGhostfolioDailyRequests,
|
||||||
|
dailyRequestsMax: await this.ghostfolioService.getMaxDailyRequests()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,83 @@
|
|||||||
|
import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
|
||||||
|
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
||||||
|
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 { YahooFinanceDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service';
|
||||||
|
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
|
||||||
|
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
|
||||||
|
import { EodHistoricalDataService } from '@ghostfolio/api/services/data-provider/eod-historical-data/eod-historical-data.service';
|
||||||
|
import { FinancialModelingPrepService } from '@ghostfolio/api/services/data-provider/financial-modeling-prep/financial-modeling-prep.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';
|
||||||
|
import { YahooFinanceService } from '@ghostfolio/api/services/data-provider/yahoo-finance/yahoo-finance.service';
|
||||||
|
import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
|
||||||
|
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
|
||||||
|
import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
|
||||||
|
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
|
||||||
|
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { GhostfolioController } from './ghostfolio.controller';
|
||||||
|
import { GhostfolioService } from './ghostfolio.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
controllers: [GhostfolioController],
|
||||||
|
imports: [
|
||||||
|
CryptocurrencyModule,
|
||||||
|
DataProviderModule,
|
||||||
|
MarketDataModule,
|
||||||
|
PrismaModule,
|
||||||
|
PropertyModule,
|
||||||
|
RedisCacheModule,
|
||||||
|
SymbolProfileModule
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
AlphaVantageService,
|
||||||
|
CoinGeckoService,
|
||||||
|
ConfigurationService,
|
||||||
|
DataProviderService,
|
||||||
|
EodHistoricalDataService,
|
||||||
|
FinancialModelingPrepService,
|
||||||
|
GhostfolioService,
|
||||||
|
GoogleSheetsService,
|
||||||
|
ManualService,
|
||||||
|
RapidApiService,
|
||||||
|
YahooFinanceService,
|
||||||
|
YahooFinanceDataEnhancerService,
|
||||||
|
{
|
||||||
|
inject: [
|
||||||
|
AlphaVantageService,
|
||||||
|
CoinGeckoService,
|
||||||
|
EodHistoricalDataService,
|
||||||
|
FinancialModelingPrepService,
|
||||||
|
GoogleSheetsService,
|
||||||
|
ManualService,
|
||||||
|
RapidApiService,
|
||||||
|
YahooFinanceService
|
||||||
|
],
|
||||||
|
provide: 'DataProviderInterfaces',
|
||||||
|
useFactory: (
|
||||||
|
alphaVantageService,
|
||||||
|
coinGeckoService,
|
||||||
|
eodHistoricalDataService,
|
||||||
|
financialModelingPrepService,
|
||||||
|
googleSheetsService,
|
||||||
|
manualService,
|
||||||
|
rapidApiService,
|
||||||
|
yahooFinanceService
|
||||||
|
) => [
|
||||||
|
alphaVantageService,
|
||||||
|
coinGeckoService,
|
||||||
|
eodHistoricalDataService,
|
||||||
|
financialModelingPrepService,
|
||||||
|
googleSheetsService,
|
||||||
|
manualService,
|
||||||
|
rapidApiService,
|
||||||
|
yahooFinanceService
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class GhostfolioModule {}
|
@ -0,0 +1,250 @@
|
|||||||
|
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
||||||
|
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
|
||||||
|
import {
|
||||||
|
GetHistoricalParams,
|
||||||
|
GetQuotesParams,
|
||||||
|
GetSearchParams
|
||||||
|
} from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
|
||||||
|
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||||
|
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
|
||||||
|
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||||
|
import {
|
||||||
|
DEFAULT_CURRENCY,
|
||||||
|
DERIVED_CURRENCIES
|
||||||
|
} from '@ghostfolio/common/config';
|
||||||
|
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config';
|
||||||
|
import {
|
||||||
|
DataProviderInfo,
|
||||||
|
HistoricalResponse,
|
||||||
|
LookupItem,
|
||||||
|
LookupResponse,
|
||||||
|
QuotesResponse
|
||||||
|
} from '@ghostfolio/common/interfaces';
|
||||||
|
|
||||||
|
import { Injectable, Logger } from '@nestjs/common';
|
||||||
|
import { DataSource } from '@prisma/client';
|
||||||
|
import { Big } from 'big.js';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class GhostfolioService {
|
||||||
|
public constructor(
|
||||||
|
private readonly configurationService: ConfigurationService,
|
||||||
|
private readonly dataProviderService: DataProviderService,
|
||||||
|
private readonly prismaService: PrismaService,
|
||||||
|
private readonly propertyService: PropertyService
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public async getHistorical({
|
||||||
|
from,
|
||||||
|
granularity,
|
||||||
|
requestTimeout,
|
||||||
|
to,
|
||||||
|
symbol
|
||||||
|
}: GetHistoricalParams) {
|
||||||
|
const result: HistoricalResponse = { historicalData: {} };
|
||||||
|
|
||||||
|
try {
|
||||||
|
const promises: Promise<{
|
||||||
|
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||||
|
}>[] = [];
|
||||||
|
|
||||||
|
for (const dataProviderService of this.getDataProviderServices()) {
|
||||||
|
promises.push(
|
||||||
|
dataProviderService
|
||||||
|
.getHistorical({
|
||||||
|
from,
|
||||||
|
granularity,
|
||||||
|
requestTimeout,
|
||||||
|
symbol,
|
||||||
|
to
|
||||||
|
})
|
||||||
|
.then((historicalData) => {
|
||||||
|
result.historicalData = historicalData[symbol];
|
||||||
|
|
||||||
|
return historicalData;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await Promise.all(promises);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(error, 'GhostfolioService');
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getMaxDailyRequests() {
|
||||||
|
return parseInt(
|
||||||
|
((await this.propertyService.getByKey(
|
||||||
|
PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS
|
||||||
|
)) as string) || '0',
|
||||||
|
10
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getQuotes({ requestTimeout, symbols }: GetQuotesParams) {
|
||||||
|
const promises: Promise<any>[] = [];
|
||||||
|
const results: QuotesResponse = { quotes: {} };
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (const dataProvider of this.getDataProviderServices()) {
|
||||||
|
const maximumNumberOfSymbolsPerRequest =
|
||||||
|
dataProvider.getMaxNumberOfSymbolsPerRequest?.() ??
|
||||||
|
Number.MAX_SAFE_INTEGER;
|
||||||
|
|
||||||
|
for (
|
||||||
|
let i = 0;
|
||||||
|
i < symbols.length;
|
||||||
|
i += maximumNumberOfSymbolsPerRequest
|
||||||
|
) {
|
||||||
|
const symbolsChunk = symbols.slice(
|
||||||
|
i,
|
||||||
|
i + maximumNumberOfSymbolsPerRequest
|
||||||
|
);
|
||||||
|
|
||||||
|
const promise = Promise.resolve(
|
||||||
|
dataProvider.getQuotes({ requestTimeout, symbols: symbolsChunk })
|
||||||
|
);
|
||||||
|
|
||||||
|
promises.push(
|
||||||
|
promise.then(async (result) => {
|
||||||
|
for (const [symbol, dataProviderResponse] of Object.entries(
|
||||||
|
result
|
||||||
|
)) {
|
||||||
|
dataProviderResponse.dataSource = 'GHOSTFOLIO';
|
||||||
|
|
||||||
|
if (
|
||||||
|
[
|
||||||
|
...DERIVED_CURRENCIES.map(({ currency }) => {
|
||||||
|
return `${DEFAULT_CURRENCY}${currency}`;
|
||||||
|
}),
|
||||||
|
`${DEFAULT_CURRENCY}USX`
|
||||||
|
].includes(symbol)
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
results.quotes[symbol] = dataProviderResponse;
|
||||||
|
|
||||||
|
for (const {
|
||||||
|
currency,
|
||||||
|
factor,
|
||||||
|
rootCurrency
|
||||||
|
} of DERIVED_CURRENCIES) {
|
||||||
|
if (symbol === `${DEFAULT_CURRENCY}${rootCurrency}`) {
|
||||||
|
results.quotes[`${DEFAULT_CURRENCY}${currency}`] = {
|
||||||
|
...dataProviderResponse,
|
||||||
|
currency,
|
||||||
|
marketPrice: new Big(
|
||||||
|
result[`${DEFAULT_CURRENCY}${rootCurrency}`].marketPrice
|
||||||
|
)
|
||||||
|
.mul(factor)
|
||||||
|
.toNumber(),
|
||||||
|
marketState: 'open'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await Promise.all(promises);
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(error, 'GhostfolioService');
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async incrementDailyRequests({ userId }: { userId: string }) {
|
||||||
|
await this.prismaService.analytics.update({
|
||||||
|
data: {
|
||||||
|
dataProviderGhostfolioDailyRequests: { increment: 1 },
|
||||||
|
lastRequestAt: new Date()
|
||||||
|
},
|
||||||
|
where: { userId }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async lookup({
|
||||||
|
includeIndices = false,
|
||||||
|
query
|
||||||
|
}: GetSearchParams): Promise<LookupResponse> {
|
||||||
|
const results: LookupResponse = { items: [] };
|
||||||
|
|
||||||
|
if (!query) {
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
let lookupItems: LookupItem[] = [];
|
||||||
|
const promises: Promise<{ items: LookupItem[] }>[] = [];
|
||||||
|
|
||||||
|
if (query?.length < 2) {
|
||||||
|
return { items: lookupItems };
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const dataProviderService of this.getDataProviderServices()) {
|
||||||
|
promises.push(
|
||||||
|
dataProviderService.search({
|
||||||
|
includeIndices,
|
||||||
|
query
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const searchResults = await Promise.all(promises);
|
||||||
|
|
||||||
|
for (const { items } of searchResults) {
|
||||||
|
if (items?.length > 0) {
|
||||||
|
lookupItems = lookupItems.concat(items);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const filteredItems = lookupItems
|
||||||
|
.filter(({ currency }) => {
|
||||||
|
// Only allow symbols with supported currency
|
||||||
|
return currency ? true : false;
|
||||||
|
})
|
||||||
|
.sort(({ name: name1 }, { name: name2 }) => {
|
||||||
|
return name1?.toLowerCase().localeCompare(name2?.toLowerCase());
|
||||||
|
})
|
||||||
|
.map((lookupItem) => {
|
||||||
|
lookupItem.dataProviderInfo = this.getDataProviderInfo();
|
||||||
|
lookupItem.dataSource = 'GHOSTFOLIO';
|
||||||
|
|
||||||
|
return lookupItem;
|
||||||
|
});
|
||||||
|
|
||||||
|
results.items = filteredItems;
|
||||||
|
return results;
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(error, 'GhostfolioService');
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private getDataProviderInfo(): DataProviderInfo {
|
||||||
|
return {
|
||||||
|
isPremium: false,
|
||||||
|
name: 'Ghostfolio Premium',
|
||||||
|
url: 'https://ghostfol.io'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private getDataProviderServices() {
|
||||||
|
return this.configurationService
|
||||||
|
.get('DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER')
|
||||||
|
.map((dataSource) => {
|
||||||
|
return this.dataProviderService.getDataProvider(DataSource[dataSource]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -582,12 +582,13 @@ export class ImportService {
|
|||||||
const assetProfiles: {
|
const assetProfiles: {
|
||||||
[assetProfileIdentifier: string]: Partial<SymbolProfile>;
|
[assetProfileIdentifier: string]: Partial<SymbolProfile>;
|
||||||
} = {};
|
} = {};
|
||||||
|
const dataSources = await this.dataProviderService.getDataSources();
|
||||||
|
|
||||||
for (const [
|
for (const [
|
||||||
index,
|
index,
|
||||||
{ currency, dataSource, symbol, type }
|
{ currency, dataSource, symbol, type }
|
||||||
] of activitiesDto.entries()) {
|
] of activitiesDto.entries()) {
|
||||||
if (!this.configurationService.get('DATA_SOURCES').includes(dataSource)) {
|
if (!dataSources.includes(dataSource)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`activities.${index}.dataSource ("${dataSource}") is not valid`
|
`activities.${index}.dataSource ("${dataSource}") is not valid`
|
||||||
);
|
);
|
||||||
|
@ -7,6 +7,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-
|
|||||||
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||||
import {
|
import {
|
||||||
DEFAULT_CURRENCY,
|
DEFAULT_CURRENCY,
|
||||||
|
HEADER_KEY_TOKEN,
|
||||||
PROPERTY_BETTER_UPTIME_MONITOR_ID,
|
PROPERTY_BETTER_UPTIME_MONITOR_ID,
|
||||||
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
|
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
|
||||||
PROPERTY_DEMO_USER_ID,
|
PROPERTY_DEMO_USER_ID,
|
||||||
@ -347,7 +348,7 @@ export class InfoService {
|
|||||||
)}&to${format(new Date(), DATE_FORMAT)}`,
|
)}&to${format(new Date(), DATE_FORMAT)}`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${this.configurationService.get(
|
[HEADER_KEY_TOKEN]: `Bearer ${this.configurationService.get(
|
||||||
'API_KEY_BETTER_UPTIME'
|
'API_KEY_BETTER_UPTIME'
|
||||||
)}`
|
)}`
|
||||||
},
|
},
|
||||||
|
@ -183,7 +183,9 @@ export class UserService {
|
|||||||
Settings: Settings as UserWithSettings['Settings'],
|
Settings: Settings as UserWithSettings['Settings'],
|
||||||
thirdPartyId,
|
thirdPartyId,
|
||||||
updatedAt,
|
updatedAt,
|
||||||
activityCount: Analytics?.activityCount
|
activityCount: Analytics?.activityCount,
|
||||||
|
dataProviderGhostfolioDailyRequests:
|
||||||
|
Analytics?.dataProviderGhostfolioDailyRequests
|
||||||
};
|
};
|
||||||
|
|
||||||
if (user?.Settings) {
|
if (user?.Settings) {
|
||||||
@ -307,6 +309,7 @@ export class UserService {
|
|||||||
// Reset holdings view mode
|
// Reset holdings view mode
|
||||||
user.Settings.settings.holdingsViewMode = undefined;
|
user.Settings.settings.holdingsViewMode = undefined;
|
||||||
} else if (user.subscription?.type === 'Premium') {
|
} else if (user.subscription?.type === 'Premium') {
|
||||||
|
currentPermissions.push(permissions.enableDataProviderGhostfolio);
|
||||||
currentPermissions.push(permissions.reportDataGlitch);
|
currentPermissions.push(permissions.reportDataGlitch);
|
||||||
|
|
||||||
currentPermissions = without(
|
currentPermissions = without(
|
||||||
|
@ -35,6 +35,9 @@ export class ConfigurationService {
|
|||||||
DATA_SOURCES: json({
|
DATA_SOURCES: json({
|
||||||
default: [DataSource.COINGECKO, DataSource.MANUAL, DataSource.YAHOO]
|
default: [DataSource.COINGECKO, DataSource.MANUAL, DataSource.YAHOO]
|
||||||
}),
|
}),
|
||||||
|
DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: json({
|
||||||
|
default: []
|
||||||
|
}),
|
||||||
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }),
|
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }),
|
||||||
ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }),
|
ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }),
|
||||||
ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }),
|
ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }),
|
||||||
|
@ -5,6 +5,7 @@ import { AlphaVantageService } from '@ghostfolio/api/services/data-provider/alph
|
|||||||
import { CoinGeckoService } from '@ghostfolio/api/services/data-provider/coingecko/coingecko.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 { EodHistoricalDataService } from '@ghostfolio/api/services/data-provider/eod-historical-data/eod-historical-data.service';
|
||||||
import { FinancialModelingPrepService } from '@ghostfolio/api/services/data-provider/financial-modeling-prep/financial-modeling-prep.service';
|
import { FinancialModelingPrepService } from '@ghostfolio/api/services/data-provider/financial-modeling-prep/financial-modeling-prep.service';
|
||||||
|
import { GhostfolioService } from '@ghostfolio/api/services/data-provider/ghostfolio/ghostfolio.service';
|
||||||
import { GoogleSheetsService } from '@ghostfolio/api/services/data-provider/google-sheets/google-sheets.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 { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
|
||||||
import { RapidApiService } from '@ghostfolio/api/services/data-provider/rapid-api/rapid-api.service';
|
import { RapidApiService } from '@ghostfolio/api/services/data-provider/rapid-api/rapid-api.service';
|
||||||
@ -37,6 +38,7 @@ import { DataProviderService } from './data-provider.service';
|
|||||||
DataProviderService,
|
DataProviderService,
|
||||||
EodHistoricalDataService,
|
EodHistoricalDataService,
|
||||||
FinancialModelingPrepService,
|
FinancialModelingPrepService,
|
||||||
|
GhostfolioService,
|
||||||
GoogleSheetsService,
|
GoogleSheetsService,
|
||||||
ManualService,
|
ManualService,
|
||||||
RapidApiService,
|
RapidApiService,
|
||||||
@ -47,6 +49,7 @@ import { DataProviderService } from './data-provider.service';
|
|||||||
CoinGeckoService,
|
CoinGeckoService,
|
||||||
EodHistoricalDataService,
|
EodHistoricalDataService,
|
||||||
FinancialModelingPrepService,
|
FinancialModelingPrepService,
|
||||||
|
GhostfolioService,
|
||||||
GoogleSheetsService,
|
GoogleSheetsService,
|
||||||
ManualService,
|
ManualService,
|
||||||
RapidApiService,
|
RapidApiService,
|
||||||
@ -58,6 +61,7 @@ import { DataProviderService } from './data-provider.service';
|
|||||||
coinGeckoService,
|
coinGeckoService,
|
||||||
eodHistoricalDataService,
|
eodHistoricalDataService,
|
||||||
financialModelingPrepService,
|
financialModelingPrepService,
|
||||||
|
ghostfolioService,
|
||||||
googleSheetsService,
|
googleSheetsService,
|
||||||
manualService,
|
manualService,
|
||||||
rapidApiService,
|
rapidApiService,
|
||||||
@ -67,6 +71,7 @@ import { DataProviderService } from './data-provider.service';
|
|||||||
coinGeckoService,
|
coinGeckoService,
|
||||||
eodHistoricalDataService,
|
eodHistoricalDataService,
|
||||||
financialModelingPrepService,
|
financialModelingPrepService,
|
||||||
|
ghostfolioService,
|
||||||
googleSheetsService,
|
googleSheetsService,
|
||||||
manualService,
|
manualService,
|
||||||
rapidApiService,
|
rapidApiService,
|
||||||
|
@ -11,6 +11,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv
|
|||||||
import {
|
import {
|
||||||
DEFAULT_CURRENCY,
|
DEFAULT_CURRENCY,
|
||||||
DERIVED_CURRENCIES,
|
DERIVED_CURRENCIES,
|
||||||
|
PROPERTY_API_KEY_GHOSTFOLIO,
|
||||||
PROPERTY_DATA_SOURCE_MAPPING
|
PROPERTY_DATA_SOURCE_MAPPING
|
||||||
} from '@ghostfolio/common/config';
|
} from '@ghostfolio/common/config';
|
||||||
import {
|
import {
|
||||||
@ -153,6 +154,24 @@ export class DataProviderService {
|
|||||||
return DataSource[this.configurationService.get('DATA_SOURCE_IMPORT')];
|
return DataSource[this.configurationService.get('DATA_SOURCE_IMPORT')];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getDataSources(): Promise<DataSource[]> {
|
||||||
|
const dataSources: DataSource[] = this.configurationService
|
||||||
|
.get('DATA_SOURCES')
|
||||||
|
.map((dataSource) => {
|
||||||
|
return DataSource[dataSource];
|
||||||
|
});
|
||||||
|
|
||||||
|
const ghostfolioApiKey = (await this.propertyService.getByKey(
|
||||||
|
PROPERTY_API_KEY_GHOSTFOLIO
|
||||||
|
)) as string;
|
||||||
|
|
||||||
|
if (ghostfolioApiKey) {
|
||||||
|
dataSources.push('GHOSTFOLIO');
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataSources.sort();
|
||||||
|
}
|
||||||
|
|
||||||
public async getDividends({
|
public async getDividends({
|
||||||
dataSource,
|
dataSource,
|
||||||
from,
|
from,
|
||||||
@ -589,11 +608,11 @@ export class DataProviderService {
|
|||||||
return { items: lookupItems };
|
return { items: lookupItems };
|
||||||
}
|
}
|
||||||
|
|
||||||
const dataProviderServices = this.configurationService
|
const dataSources = await this.getDataSources();
|
||||||
.get('DATA_SOURCES')
|
|
||||||
.map((dataSource) => {
|
const dataProviderServices = dataSources.map((dataSource) => {
|
||||||
return this.getDataProvider(DataSource[dataSource]);
|
return this.getDataProvider(DataSource[dataSource]);
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const dataProviderService of dataProviderServices) {
|
for (const dataProviderService of dataProviderServices) {
|
||||||
promises.push(
|
promises.push(
|
||||||
@ -606,11 +625,11 @@ export class DataProviderService {
|
|||||||
|
|
||||||
const searchResults = await Promise.all(promises);
|
const searchResults = await Promise.all(promises);
|
||||||
|
|
||||||
searchResults.forEach(({ items }) => {
|
for (const { items } of searchResults) {
|
||||||
if (items?.length > 0) {
|
if (items?.length > 0) {
|
||||||
lookupItems = lookupItems.concat(items);
|
lookupItems = lookupItems.concat(items);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
const filteredItems = lookupItems
|
const filteredItems = lookupItems
|
||||||
.filter(({ currency }) => {
|
.filter(({ currency }) => {
|
||||||
|
@ -0,0 +1,221 @@
|
|||||||
|
import { environment } from '@ghostfolio/api/environments/environment';
|
||||||
|
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
||||||
|
import {
|
||||||
|
DataProviderInterface,
|
||||||
|
GetDividendsParams,
|
||||||
|
GetHistoricalParams,
|
||||||
|
GetQuotesParams,
|
||||||
|
GetSearchParams
|
||||||
|
} from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
|
||||||
|
import {
|
||||||
|
IDataProviderHistoricalResponse,
|
||||||
|
IDataProviderResponse
|
||||||
|
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||||
|
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||||
|
import {
|
||||||
|
HEADER_KEY_TOKEN,
|
||||||
|
PROPERTY_API_KEY_GHOSTFOLIO
|
||||||
|
} from '@ghostfolio/common/config';
|
||||||
|
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||||
|
import {
|
||||||
|
DataProviderInfo,
|
||||||
|
HistoricalResponse,
|
||||||
|
LookupResponse,
|
||||||
|
QuotesResponse
|
||||||
|
} from '@ghostfolio/common/interfaces';
|
||||||
|
|
||||||
|
import { Injectable, Logger } from '@nestjs/common';
|
||||||
|
import { DataSource, SymbolProfile } from '@prisma/client';
|
||||||
|
import { format } from 'date-fns';
|
||||||
|
import got from 'got';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class GhostfolioService implements DataProviderInterface {
|
||||||
|
private apiKey: string;
|
||||||
|
private readonly URL = environment.production
|
||||||
|
? 'https://ghostfol.io/api'
|
||||||
|
: `${this.configurationService.get('ROOT_URL')}/api`;
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
private readonly configurationService: ConfigurationService,
|
||||||
|
private readonly propertyService: PropertyService
|
||||||
|
) {
|
||||||
|
void this.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async initialize() {
|
||||||
|
this.apiKey = (await this.propertyService.getByKey(
|
||||||
|
PROPERTY_API_KEY_GHOSTFOLIO
|
||||||
|
)) as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
public canHandle() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getAssetProfile({
|
||||||
|
symbol
|
||||||
|
}: {
|
||||||
|
symbol: string;
|
||||||
|
}): Promise<Partial<SymbolProfile>> {
|
||||||
|
const { items } = await this.search({ query: symbol });
|
||||||
|
const searchResult = items?.[0];
|
||||||
|
|
||||||
|
return {
|
||||||
|
symbol,
|
||||||
|
assetClass: searchResult?.assetClass,
|
||||||
|
assetSubClass: searchResult?.assetSubClass,
|
||||||
|
currency: searchResult?.currency,
|
||||||
|
dataSource: this.getName(),
|
||||||
|
name: searchResult?.name
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public getDataProviderInfo(): DataProviderInfo {
|
||||||
|
return {
|
||||||
|
isPremium: true,
|
||||||
|
name: 'Ghostfolio',
|
||||||
|
url: 'https://ghostfo.io'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getDividends({}: GetDividendsParams) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getHistorical({
|
||||||
|
from,
|
||||||
|
granularity = 'day',
|
||||||
|
requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
|
||||||
|
symbol,
|
||||||
|
to
|
||||||
|
}: GetHistoricalParams): Promise<{
|
||||||
|
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||||
|
}> {
|
||||||
|
try {
|
||||||
|
const abortController = new AbortController();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
abortController.abort();
|
||||||
|
}, requestTimeout);
|
||||||
|
|
||||||
|
const { historicalData } = await got(
|
||||||
|
`${this.URL}/v1/data-providers/ghostfolio/historical/${symbol}?from=${format(from, DATE_FORMAT)}&granularity=${granularity}&to=${format(
|
||||||
|
to,
|
||||||
|
DATE_FORMAT
|
||||||
|
)}`,
|
||||||
|
{
|
||||||
|
headers: this.getRequestHeaders(),
|
||||||
|
// @ts-ignore
|
||||||
|
signal: abortController.signal
|
||||||
|
}
|
||||||
|
).json<HistoricalResponse>();
|
||||||
|
|
||||||
|
return {
|
||||||
|
[symbol]: historicalData
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
`Could not get historical market data for ${symbol} (${this.getName()}) from ${format(
|
||||||
|
from,
|
||||||
|
DATE_FORMAT
|
||||||
|
)} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public getMaxNumberOfSymbolsPerRequest() {
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
public getName(): DataSource {
|
||||||
|
return DataSource.GHOSTFOLIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getQuotes({
|
||||||
|
requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
|
||||||
|
symbols
|
||||||
|
}: GetQuotesParams): Promise<{
|
||||||
|
[symbol: string]: IDataProviderResponse;
|
||||||
|
}> {
|
||||||
|
let response: { [symbol: string]: IDataProviderResponse } = {};
|
||||||
|
|
||||||
|
if (symbols.length <= 0) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const abortController = new AbortController();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
abortController.abort();
|
||||||
|
}, requestTimeout);
|
||||||
|
|
||||||
|
const { quotes } = await got(
|
||||||
|
`${this.URL}/v1/data-providers/ghostfolio/quotes?symbols=${symbols.join(',')}`,
|
||||||
|
{
|
||||||
|
headers: this.getRequestHeaders(),
|
||||||
|
// @ts-ignore
|
||||||
|
signal: abortController.signal
|
||||||
|
}
|
||||||
|
).json<QuotesResponse>();
|
||||||
|
|
||||||
|
response = quotes;
|
||||||
|
} catch (error) {
|
||||||
|
let message = error;
|
||||||
|
|
||||||
|
if (error?.code === 'ABORT_ERR') {
|
||||||
|
message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${(
|
||||||
|
this.configurationService.get('REQUEST_TIMEOUT') / 1000
|
||||||
|
).toFixed(3)} seconds`;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.error(message, 'GhostfolioService');
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public getTestSymbol() {
|
||||||
|
return 'AAPL.US';
|
||||||
|
}
|
||||||
|
|
||||||
|
public async search({ query }: GetSearchParams): Promise<LookupResponse> {
|
||||||
|
let searchResult: LookupResponse = { items: [] };
|
||||||
|
|
||||||
|
try {
|
||||||
|
const abortController = new AbortController();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
abortController.abort();
|
||||||
|
}, this.configurationService.get('REQUEST_TIMEOUT'));
|
||||||
|
|
||||||
|
searchResult = await got(
|
||||||
|
`${this.URL}/v1/data-providers/ghostfolio/lookup?query=${query}`,
|
||||||
|
{
|
||||||
|
headers: this.getRequestHeaders(),
|
||||||
|
// @ts-ignore
|
||||||
|
signal: abortController.signal
|
||||||
|
}
|
||||||
|
).json<LookupResponse>();
|
||||||
|
} catch (error) {
|
||||||
|
let message = error;
|
||||||
|
|
||||||
|
if (error?.code === 'ABORT_ERR') {
|
||||||
|
message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${(
|
||||||
|
this.configurationService.get('REQUEST_TIMEOUT') / 1000
|
||||||
|
).toFixed(3)} seconds`;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.error(message, 'GhostfolioService');
|
||||||
|
}
|
||||||
|
|
||||||
|
return searchResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getRequestHeaders() {
|
||||||
|
return {
|
||||||
|
[HEADER_KEY_TOKEN]: `Bearer ${this.apiKey}`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@ export interface Environment extends CleanedEnvAccessors {
|
|||||||
DATA_SOURCE_EXCHANGE_RATES: string;
|
DATA_SOURCE_EXCHANGE_RATES: string;
|
||||||
DATA_SOURCE_IMPORT: string;
|
DATA_SOURCE_IMPORT: string;
|
||||||
DATA_SOURCES: string[];
|
DATA_SOURCES: string[];
|
||||||
|
DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: string[];
|
||||||
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean;
|
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean;
|
||||||
ENABLE_FEATURE_READ_ONLY_MODE: boolean;
|
ENABLE_FEATURE_READ_ONLY_MODE: boolean;
|
||||||
ENABLE_FEATURE_SOCIAL_LOGIN: boolean;
|
ENABLE_FEATURE_SOCIAL_LOGIN: boolean;
|
||||||
|
@ -32,6 +32,15 @@ const routes: Routes = [
|
|||||||
loadChildren: () =>
|
loadChildren: () =>
|
||||||
import('./pages/admin/admin-page.module').then((m) => m.AdminPageModule)
|
import('./pages/admin/admin-page.module').then((m) => m.AdminPageModule)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
canActivate: [AuthGuard],
|
||||||
|
loadComponent: () =>
|
||||||
|
import('./pages/api/api-page.component').then(
|
||||||
|
(c) => c.GfApiPageComponent
|
||||||
|
),
|
||||||
|
path: 'api',
|
||||||
|
title: 'Ghostfolio API'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'auth',
|
path: 'auth',
|
||||||
loadChildren: () =>
|
loadChildren: () =>
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
target="_blank"
|
target="_blank"
|
||||||
[href]="pricingUrl"
|
[href]="pricingUrl"
|
||||||
>
|
>
|
||||||
<span class="badge badge-warning mr-1" i18n>NEW</span>
|
@if (isGhostfolioApiKeyValid === false) {
|
||||||
|
<span class="badge badge-warning mr-1" i18n>NEW</span>
|
||||||
|
}
|
||||||
Ghostfolio Premium
|
Ghostfolio Premium
|
||||||
<gf-premium-indicator
|
<gf-premium-indicator
|
||||||
class="d-inline-block ml-1"
|
class="d-inline-block ml-1"
|
||||||
@ -20,14 +22,32 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-50">
|
<div class="w-50">
|
||||||
<button
|
@if (isGhostfolioApiKeyValid === true) {
|
||||||
color="accent"
|
<div class="align-items-center d-flex flex-wrap">
|
||||||
mat-flat-button
|
<div class="mr-3">
|
||||||
(click)="onSetGhostfolioApiKey()"
|
{{ ghostfolioApiStatus.dailyRequests }}
|
||||||
>
|
<ng-container i18n>of</ng-container>
|
||||||
<ion-icon class="mr-1" name="key-outline" />
|
{{ ghostfolioApiStatus.dailyRequestsMax }}
|
||||||
<span i18n>Set API Key</span>
|
<ng-container i18n>daily requests</ng-container>
|
||||||
</button>
|
</div>
|
||||||
|
<button
|
||||||
|
color="warn"
|
||||||
|
mat-flat-button
|
||||||
|
(click)="onRemoveGhostfolioApiKey()"
|
||||||
|
>
|
||||||
|
<span i18n>Remove API key</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
} @else if (isGhostfolioApiKeyValid === false) {
|
||||||
|
<button
|
||||||
|
color="accent"
|
||||||
|
mat-flat-button
|
||||||
|
(click)="onSetGhostfolioApiKey()"
|
||||||
|
>
|
||||||
|
<ion-icon class="mr-1" name="key-outline" />
|
||||||
|
<span i18n>Set API key</span>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
|
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
|
||||||
|
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
|
||||||
|
import { AdminService } from '@ghostfolio/client/services/admin.service';
|
||||||
|
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||||
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
||||||
import { User } from '@ghostfolio/common/interfaces';
|
import { PROPERTY_API_KEY_GHOSTFOLIO } from '@ghostfolio/common/config';
|
||||||
|
import {
|
||||||
|
DataProviderGhostfolioStatusResponse,
|
||||||
|
User
|
||||||
|
} from '@ghostfolio/common/interfaces';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectionStrategy,
|
ChangeDetectionStrategy,
|
||||||
@ -10,7 +18,7 @@ import {
|
|||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
import { DeviceDetectorService } from 'ngx-device-detector';
|
import { DeviceDetectorService } from 'ngx-device-detector';
|
||||||
import { Subject, takeUntil } from 'rxjs';
|
import { catchError, filter, of, Subject, takeUntil } from 'rxjs';
|
||||||
|
|
||||||
import { GfGhostfolioPremiumApiDialogComponent } from './ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component';
|
import { GfGhostfolioPremiumApiDialogComponent } from './ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component';
|
||||||
|
|
||||||
@ -21,6 +29,8 @@ import { GfGhostfolioPremiumApiDialogComponent } from './ghostfolio-premium-api-
|
|||||||
templateUrl: './admin-settings.component.html'
|
templateUrl: './admin-settings.component.html'
|
||||||
})
|
})
|
||||||
export class AdminSettingsComponent implements OnDestroy, OnInit {
|
export class AdminSettingsComponent implements OnDestroy, OnInit {
|
||||||
|
public ghostfolioApiStatus: DataProviderGhostfolioStatusResponse;
|
||||||
|
public isGhostfolioApiKeyValid: boolean;
|
||||||
public pricingUrl: string;
|
public pricingUrl: string;
|
||||||
|
|
||||||
private deviceType: string;
|
private deviceType: string;
|
||||||
@ -28,9 +38,12 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
|
|||||||
private user: User;
|
private user: User;
|
||||||
|
|
||||||
public constructor(
|
public constructor(
|
||||||
|
private adminService: AdminService,
|
||||||
private changeDetectorRef: ChangeDetectorRef,
|
private changeDetectorRef: ChangeDetectorRef,
|
||||||
|
private dataService: DataService,
|
||||||
private deviceService: DeviceDetectorService,
|
private deviceService: DeviceDetectorService,
|
||||||
private matDialog: MatDialog,
|
private matDialog: MatDialog,
|
||||||
|
private notificationService: NotificationService,
|
||||||
private userService: UserService
|
private userService: UserService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@ -50,22 +63,72 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
|
|||||||
this.changeDetectorRef.markForCheck();
|
this.changeDetectorRef.markForCheck();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public onRemoveGhostfolioApiKey() {
|
||||||
|
this.notificationService.confirm({
|
||||||
|
confirmFn: () => {
|
||||||
|
this.dataService
|
||||||
|
.putAdminSetting(PROPERTY_API_KEY_GHOSTFOLIO, { value: undefined })
|
||||||
|
.subscribe(() => {
|
||||||
|
this.initialize();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
confirmType: ConfirmationDialogType.Warn,
|
||||||
|
title: $localize`Do you really want to delete the API key?`
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public onSetGhostfolioApiKey() {
|
public onSetGhostfolioApiKey() {
|
||||||
this.matDialog.open(GfGhostfolioPremiumApiDialogComponent, {
|
const dialogRef = this.matDialog.open(
|
||||||
autoFocus: false,
|
GfGhostfolioPremiumApiDialogComponent,
|
||||||
data: {
|
{
|
||||||
deviceType: this.deviceType,
|
autoFocus: false,
|
||||||
pricingUrl: this.pricingUrl
|
data: {
|
||||||
},
|
deviceType: this.deviceType,
|
||||||
height: this.deviceType === 'mobile' ? '98vh' : undefined,
|
pricingUrl: this.pricingUrl
|
||||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
},
|
||||||
});
|
height: this.deviceType === 'mobile' ? '98vh' : undefined,
|
||||||
|
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
dialogRef
|
||||||
|
.afterClosed()
|
||||||
|
.pipe(takeUntil(this.unsubscribeSubject))
|
||||||
|
.subscribe(() => {
|
||||||
|
this.initialize();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public ngOnDestroy() {
|
public ngOnDestroy() {
|
||||||
this.unsubscribeSubject.next();
|
this.unsubscribeSubject.next();
|
||||||
this.unsubscribeSubject.complete();
|
this.unsubscribeSubject.complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private initialize() {
|
||||||
|
this.adminService
|
||||||
|
.fetchGhostfolioDataProviderStatus()
|
||||||
|
.pipe(
|
||||||
|
catchError(() => {
|
||||||
|
this.isGhostfolioApiKeyValid = false;
|
||||||
|
|
||||||
|
this.changeDetectorRef.markForCheck();
|
||||||
|
|
||||||
|
return of(null);
|
||||||
|
}),
|
||||||
|
filter((status) => {
|
||||||
|
return status !== null;
|
||||||
|
}),
|
||||||
|
takeUntil(this.unsubscribeSubject)
|
||||||
|
)
|
||||||
|
.subscribe((status) => {
|
||||||
|
this.ghostfolioApiStatus = status;
|
||||||
|
this.isGhostfolioApiKeyValid = true;
|
||||||
|
|
||||||
|
this.changeDetectorRef.markForCheck();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||||
|
import { PROPERTY_API_KEY_GHOSTFOLIO } from '@ghostfolio/common/config';
|
||||||
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
|
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
|
||||||
|
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
@ -30,10 +32,28 @@ import { GhostfolioPremiumApiDialogParams } from './interfaces/interfaces';
|
|||||||
export class GfGhostfolioPremiumApiDialogComponent {
|
export class GfGhostfolioPremiumApiDialogComponent {
|
||||||
public constructor(
|
public constructor(
|
||||||
@Inject(MAT_DIALOG_DATA) public data: GhostfolioPremiumApiDialogParams,
|
@Inject(MAT_DIALOG_DATA) public data: GhostfolioPremiumApiDialogParams,
|
||||||
|
private dataService: DataService,
|
||||||
public dialogRef: MatDialogRef<GfGhostfolioPremiumApiDialogComponent>
|
public dialogRef: MatDialogRef<GfGhostfolioPremiumApiDialogComponent>
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public onCancel() {
|
public onCancel() {
|
||||||
this.dialogRef.close();
|
this.dialogRef.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public onSetGhostfolioApiKey() {
|
||||||
|
let ghostfolioApiKey = prompt(
|
||||||
|
$localize`Please enter your Ghostfolio API key:`
|
||||||
|
);
|
||||||
|
ghostfolioApiKey = ghostfolioApiKey?.trim();
|
||||||
|
|
||||||
|
if (ghostfolioApiKey) {
|
||||||
|
this.dataService
|
||||||
|
.putAdminSetting(PROPERTY_API_KEY_GHOSTFOLIO, {
|
||||||
|
value: ghostfolioApiKey
|
||||||
|
})
|
||||||
|
.subscribe(() => {
|
||||||
|
this.dialogRef.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,19 @@
|
|||||||
href="mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Data Provider&body=Hello%0D%0DPlease notify me as soon as the Ghostfolio Premium Data Provider is available.%0D%0DKind regards"
|
href="mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Data Provider&body=Hello%0D%0DPlease notify me as soon as the Ghostfolio Premium Data Provider is available.%0D%0DKind regards"
|
||||||
i18n
|
i18n
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
|
>Notify me</a
|
||||||
>
|
>
|
||||||
Notify me
|
<div>
|
||||||
</a>
|
<small class="text-muted" i18n>or</small>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
color="accent"
|
||||||
|
i18n
|
||||||
|
mat-stroked-button
|
||||||
|
(click)="onSetGhostfolioApiKey()"
|
||||||
|
>
|
||||||
|
I have an API key
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/imperso
|
|||||||
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
|
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
|
||||||
import {
|
import {
|
||||||
HEADER_KEY_IMPERSONATION,
|
HEADER_KEY_IMPERSONATION,
|
||||||
|
HEADER_KEY_SKIP_INTERCEPTOR,
|
||||||
HEADER_KEY_TIMEZONE,
|
HEADER_KEY_TIMEZONE,
|
||||||
HEADER_KEY_TOKEN
|
HEADER_KEY_TOKEN
|
||||||
} from '@ghostfolio/common/config';
|
} from '@ghostfolio/common/config';
|
||||||
@ -27,6 +28,16 @@ export class AuthInterceptor implements HttpInterceptor {
|
|||||||
next: HttpHandler
|
next: HttpHandler
|
||||||
): Observable<HttpEvent<any>> {
|
): Observable<HttpEvent<any>> {
|
||||||
let request = req;
|
let request = req;
|
||||||
|
|
||||||
|
if (request.headers.has(HEADER_KEY_SKIP_INTERCEPTOR)) {
|
||||||
|
// Bypass the interceptor
|
||||||
|
request = request.clone({
|
||||||
|
headers: req.headers.delete(HEADER_KEY_SKIP_INTERCEPTOR)
|
||||||
|
});
|
||||||
|
|
||||||
|
return next.handle(request);
|
||||||
|
}
|
||||||
|
|
||||||
let headers = request.headers.set(
|
let headers = request.headers.set(
|
||||||
HEADER_KEY_TIMEZONE,
|
HEADER_KEY_TIMEZONE,
|
||||||
Intl?.DateTimeFormat().resolvedOptions().timeZone
|
Intl?.DateTimeFormat().resolvedOptions().timeZone
|
||||||
|
@ -103,7 +103,7 @@ export class HttpResponseInterceptor implements HttpInterceptor {
|
|||||||
} else if (error.status === StatusCodes.UNAUTHORIZED) {
|
} else if (error.status === StatusCodes.UNAUTHORIZED) {
|
||||||
if (this.webAuthnService.isEnabled()) {
|
if (this.webAuthnService.isEnabled()) {
|
||||||
this.router.navigate(['/webauthn']);
|
this.router.navigate(['/webauthn']);
|
||||||
} else {
|
} else if (!error.url.includes('/data-providers/ghostfolio/status')) {
|
||||||
this.tokenStorageService.signOut();
|
this.tokenStorageService.signOut();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
110
apps/client/src/app/pages/api/api-page.component.ts
Normal file
110
apps/client/src/app/pages/api/api-page.component.ts
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||||
|
import {
|
||||||
|
DataProviderGhostfolioStatusResponse,
|
||||||
|
HistoricalResponse,
|
||||||
|
LookupResponse,
|
||||||
|
QuotesResponse
|
||||||
|
} from '@ghostfolio/common/interfaces';
|
||||||
|
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { format, startOfYear } from 'date-fns';
|
||||||
|
import { map, Observable, Subject, takeUntil } from 'rxjs';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
host: { class: 'page' },
|
||||||
|
imports: [CommonModule],
|
||||||
|
selector: 'gf-api-page',
|
||||||
|
standalone: true,
|
||||||
|
styleUrls: ['./api-page.scss'],
|
||||||
|
templateUrl: './api-page.html'
|
||||||
|
})
|
||||||
|
export class GfApiPageComponent implements OnInit {
|
||||||
|
public historicalData$: Observable<HistoricalResponse['historicalData']>;
|
||||||
|
public quotes$: Observable<QuotesResponse['quotes']>;
|
||||||
|
public status$: Observable<DataProviderGhostfolioStatusResponse>;
|
||||||
|
public symbols$: Observable<LookupResponse['items']>;
|
||||||
|
|
||||||
|
private unsubscribeSubject = new Subject<void>();
|
||||||
|
|
||||||
|
public constructor(private http: HttpClient) {}
|
||||||
|
|
||||||
|
public ngOnInit() {
|
||||||
|
this.historicalData$ = this.fetchHistoricalData({ symbol: 'AAPL.US' });
|
||||||
|
this.quotes$ = this.fetchQuotes({ symbols: ['AAPL.US', 'VOO.US'] });
|
||||||
|
this.status$ = this.fetchStatus();
|
||||||
|
this.symbols$ = this.fetchSymbols({ query: 'apple' });
|
||||||
|
}
|
||||||
|
|
||||||
|
public ngOnDestroy() {
|
||||||
|
this.unsubscribeSubject.next();
|
||||||
|
this.unsubscribeSubject.complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
private fetchHistoricalData({ symbol }: { symbol: string }) {
|
||||||
|
const params = new HttpParams()
|
||||||
|
.set('from', format(startOfYear(new Date()), DATE_FORMAT))
|
||||||
|
.set('to', format(new Date(), DATE_FORMAT));
|
||||||
|
|
||||||
|
return this.http
|
||||||
|
.get<HistoricalResponse>(
|
||||||
|
`/api/v1/data-providers/ghostfolio/historical/${symbol}`,
|
||||||
|
{ params }
|
||||||
|
)
|
||||||
|
.pipe(
|
||||||
|
map(({ historicalData }) => {
|
||||||
|
return historicalData;
|
||||||
|
}),
|
||||||
|
takeUntil(this.unsubscribeSubject)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private fetchQuotes({ symbols }: { symbols: string[] }) {
|
||||||
|
const params = new HttpParams().set('symbols', symbols.join(','));
|
||||||
|
|
||||||
|
return this.http
|
||||||
|
.get<QuotesResponse>('/api/v1/data-providers/ghostfolio/quotes', {
|
||||||
|
params
|
||||||
|
})
|
||||||
|
.pipe(
|
||||||
|
map(({ quotes }) => {
|
||||||
|
return quotes;
|
||||||
|
}),
|
||||||
|
takeUntil(this.unsubscribeSubject)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private fetchStatus() {
|
||||||
|
return this.http
|
||||||
|
.get<DataProviderGhostfolioStatusResponse>(
|
||||||
|
'/api/v1/data-providers/ghostfolio/status'
|
||||||
|
)
|
||||||
|
.pipe(takeUntil(this.unsubscribeSubject));
|
||||||
|
}
|
||||||
|
|
||||||
|
private fetchSymbols({
|
||||||
|
includeIndices = false,
|
||||||
|
query
|
||||||
|
}: {
|
||||||
|
includeIndices?: boolean;
|
||||||
|
query: string;
|
||||||
|
}) {
|
||||||
|
let params = new HttpParams().set('query', query);
|
||||||
|
|
||||||
|
if (includeIndices) {
|
||||||
|
params = params.append('includeIndices', includeIndices);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.http
|
||||||
|
.get<LookupResponse>('/api/v1/data-providers/ghostfolio/lookup', {
|
||||||
|
params
|
||||||
|
})
|
||||||
|
.pipe(
|
||||||
|
map(({ items }) => {
|
||||||
|
return items;
|
||||||
|
}),
|
||||||
|
takeUntil(this.unsubscribeSubject)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
48
apps/client/src/app/pages/api/api-page.html
Normal file
48
apps/client/src/app/pages/api/api-page.html
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<div class="container">
|
||||||
|
<div class="mb-3">
|
||||||
|
<h2 class="text-center">Status</h2>
|
||||||
|
<div>{{ status$ | async | json }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<h2 class="text-center">Lookup</h2>
|
||||||
|
@if (symbols$) {
|
||||||
|
@let symbols = symbols$ | async;
|
||||||
|
<ul>
|
||||||
|
@for (item of symbols; track item.symbol) {
|
||||||
|
<li>{{ item.name }} ({{ item.symbol }})</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2 class="text-center">Quotes</h2>
|
||||||
|
@if (quotes$) {
|
||||||
|
@let quotes = quotes$ | async;
|
||||||
|
<ul>
|
||||||
|
@for (quote of quotes | keyvalue; track quote) {
|
||||||
|
<li>
|
||||||
|
{{ quote.key }}: {{ quote.value.marketPrice }}
|
||||||
|
{{ quote.value.currency }}
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2 class="text-center">Historical</h2>
|
||||||
|
@if (historicalData$) {
|
||||||
|
@let historicalData = historicalData$ | async;
|
||||||
|
<ul>
|
||||||
|
@for (
|
||||||
|
historicalDataItem of historicalData | keyvalue;
|
||||||
|
track historicalDataItem
|
||||||
|
) {
|
||||||
|
<li>
|
||||||
|
{{ historicalDataItem.key }}:
|
||||||
|
{{ historicalDataItem.value.marketPrice }}
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
3
apps/client/src/app/pages/api/api-page.scss
Normal file
3
apps/client/src/app/pages/api/api-page.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
}
|
@ -5,6 +5,11 @@ import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.
|
|||||||
import { CreateTagDto } from '@ghostfolio/api/app/tag/create-tag.dto';
|
import { CreateTagDto } from '@ghostfolio/api/app/tag/create-tag.dto';
|
||||||
import { UpdateTagDto } from '@ghostfolio/api/app/tag/update-tag.dto';
|
import { UpdateTagDto } from '@ghostfolio/api/app/tag/update-tag.dto';
|
||||||
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||||
|
import {
|
||||||
|
HEADER_KEY_SKIP_INTERCEPTOR,
|
||||||
|
HEADER_KEY_TOKEN,
|
||||||
|
PROPERTY_API_KEY_GHOSTFOLIO
|
||||||
|
} from '@ghostfolio/common/config';
|
||||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||||
import {
|
import {
|
||||||
AssetProfileIdentifier,
|
AssetProfileIdentifier,
|
||||||
@ -13,6 +18,7 @@ import {
|
|||||||
AdminMarketData,
|
AdminMarketData,
|
||||||
AdminMarketDataDetails,
|
AdminMarketDataDetails,
|
||||||
AdminUsers,
|
AdminUsers,
|
||||||
|
DataProviderGhostfolioStatusResponse,
|
||||||
EnhancedSymbolProfile,
|
EnhancedSymbolProfile,
|
||||||
Filter
|
Filter
|
||||||
} from '@ghostfolio/common/interfaces';
|
} from '@ghostfolio/common/interfaces';
|
||||||
@ -23,8 +29,9 @@ import { SortDirection } from '@angular/material/sort';
|
|||||||
import { DataSource, MarketData, Platform, Tag } from '@prisma/client';
|
import { DataSource, MarketData, Platform, Tag } from '@prisma/client';
|
||||||
import { JobStatus } from 'bull';
|
import { JobStatus } from 'bull';
|
||||||
import { format, parseISO } from 'date-fns';
|
import { format, parseISO } from 'date-fns';
|
||||||
import { Observable, map } from 'rxjs';
|
import { Observable, map, switchMap } from 'rxjs';
|
||||||
|
|
||||||
|
import { environment } from '../../environments/environment';
|
||||||
import { DataService } from './data.service';
|
import { DataService } from './data.service';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
@ -136,6 +143,22 @@ export class AdminService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fetchGhostfolioDataProviderStatus() {
|
||||||
|
return this.fetchAdminData().pipe(
|
||||||
|
switchMap(({ settings }) => {
|
||||||
|
return this.http.get<DataProviderGhostfolioStatusResponse>(
|
||||||
|
`${environment.production ? 'https://ghostfol.io' : ''}/api/v1/data-providers/ghostfolio/status`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
[HEADER_KEY_SKIP_INTERCEPTOR]: 'true',
|
||||||
|
[HEADER_KEY_TOKEN]: `Bearer ${settings[PROPERTY_API_KEY_GHOSTFOLIO]}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public fetchJobs({ status }: { status?: JobStatus[] }) {
|
public fetchJobs({ status }: { status?: JobStatus[] }) {
|
||||||
let params = new HttpParams();
|
let params = new HttpParams();
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<target state="translated">Característiques</target>
|
<target state="translated">Característiques</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7373613501758200135" datatype="html">
|
<trans-unit id="7373613501758200135" datatype="html">
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<target state="translated">Internacionalització</target>
|
<target state="translated">Internacionalització</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5207635742003539443" datatype="html">
|
<trans-unit id="5207635742003539443" datatype="html">
|
||||||
@ -22,7 +22,7 @@
|
|||||||
<target state="translated">Iniciar sessió</target>
|
<target state="translated">Iniciar sessió</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -633,7 +633,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1051,7 +1051,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -1155,7 +1159,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -2191,7 +2199,7 @@
|
|||||||
<target state="translated">Plataformes</target>
|
<target state="translated">Plataformes</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
||||||
@ -2199,7 +2207,7 @@
|
|||||||
<target state="translated">Etiquetes</target>
|
<target state="translated">Etiquetes</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -2833,6 +2841,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="new">or</target>
|
<target state="new">or</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -4991,7 +5003,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f27e9dd8de80176286e02312e694cb8d1e485a5d" datatype="html">
|
<trans-unit id="f27e9dd8de80176286e02312e694cb8d1e485a5d" datatype="html">
|
||||||
@ -6271,7 +6283,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -6743,7 +6759,7 @@
|
|||||||
<target state="new">Show more</target>
|
<target state="new">Show more</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4455104386790567151" datatype="html">
|
<trans-unit id="4455104386790567151" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -166,7 +166,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -238,7 +242,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1034,7 +1042,7 @@
|
|||||||
<target state="translated">Einloggen</target>
|
<target state="translated">Einloggen</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1096,6 +1104,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">oder</target>
|
<target state="translated">oder</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -1346,7 +1358,7 @@
|
|||||||
<target state="translated">Tags</target>
|
<target state="translated">Tags</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1382,7 +1394,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||||
@ -1966,7 +1982,7 @@
|
|||||||
<target state="translated">Features</target>
|
<target state="translated">Features</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2614607010577950577" datatype="html">
|
<trans-unit id="2614607010577950577" datatype="html">
|
||||||
@ -3982,7 +3998,7 @@
|
|||||||
<target state="translated">Plattformen</target>
|
<target state="translated">Plattformen</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
||||||
@ -4714,7 +4730,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||||
@ -5461,7 +5477,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -6623,7 +6639,7 @@
|
|||||||
<target state="translated">Internationalisierung</target>
|
<target state="translated">Internationalisierung</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6687,7 +6703,7 @@
|
|||||||
<target state="translated">Mehr anzeigen</target>
|
<target state="translated">Mehr anzeigen</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="translated">Ups! Es konnten leider keine Assets gefunden werden.</target>
|
<target state="translated">Ups! Es konnten leider keine Assets gefunden werden.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="translated">NEU</target>
|
<target state="translated">NEU</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="translated">API-Schlüssel setzen</target>
|
<target state="translated">API-Schlüssel setzen</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="translated"> Benachrichtige mich </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="translated">Erhalte Zugang zu 100’000+ Tickern von über 50 Handelsplätzen</target>
|
<target state="translated">Erhalte Zugang zu 100’000+ Tickern von über 50 Handelsplätzen</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="translated">von</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="translated">täglichen Anfragen</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="translated">API-Schlüssel löschen</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="translated">Möchtest du den API-Schlüssel wirklich löschen?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="translated">Bitte gib den API-Schlüssel ein:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="translated">Benachrichtige mich</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="translated"> Ich habe einen API-Schlüssel </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -167,7 +167,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -239,7 +243,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1035,7 +1043,7 @@
|
|||||||
<target state="translated">Iniciar sesión</target>
|
<target state="translated">Iniciar sesión</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1097,6 +1105,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">o</target>
|
<target state="translated">o</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -1347,7 +1359,7 @@
|
|||||||
<target state="translated">Etiquetas</target>
|
<target state="translated">Etiquetas</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1383,7 +1395,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||||
@ -1967,7 +1983,7 @@
|
|||||||
<target state="translated">Funcionalidades</target>
|
<target state="translated">Funcionalidades</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2614607010577950577" datatype="html">
|
<trans-unit id="2614607010577950577" datatype="html">
|
||||||
@ -3983,7 +3999,7 @@
|
|||||||
<target state="new">Platforms</target>
|
<target state="new">Platforms</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
||||||
@ -4715,7 +4731,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||||
@ -5462,7 +5478,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -6624,7 +6640,7 @@
|
|||||||
<target state="translated">Internacionalización</target>
|
<target state="translated">Internacionalización</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6688,7 +6704,7 @@
|
|||||||
<target state="translated">Mostrar más</target>
|
<target state="translated">Mostrar más</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7304,7 +7320,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7320,15 +7336,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7339,14 +7355,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7453,6 +7461,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -178,7 +178,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -298,7 +302,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -954,7 +962,7 @@
|
|||||||
<target state="translated">Étiquettes</target>
|
<target state="translated">Étiquettes</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1354,7 +1362,7 @@
|
|||||||
<target state="translated">Se connecter</target>
|
<target state="translated">Se connecter</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1456,6 +1464,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">ou</target>
|
<target state="translated">ou</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -2378,7 +2390,7 @@
|
|||||||
<target state="translated">Fonctionnalités</target>
|
<target state="translated">Fonctionnalités</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="803941175683258052" datatype="html">
|
<trans-unit id="803941175683258052" datatype="html">
|
||||||
@ -3150,7 +3162,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -3982,7 +3998,7 @@
|
|||||||
<target state="translated">Platformes</target>
|
<target state="translated">Platformes</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
||||||
@ -4714,7 +4730,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||||
@ -5461,7 +5477,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -6623,7 +6639,7 @@
|
|||||||
<target state="translated">Internationalisation</target>
|
<target state="translated">Internationalisation</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6687,7 +6703,7 @@
|
|||||||
<target state="translated">Voir plus</target>
|
<target state="translated">Voir plus</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -167,7 +167,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -239,7 +243,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1035,7 +1043,7 @@
|
|||||||
<target state="translated">Accedi</target>
|
<target state="translated">Accedi</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1097,6 +1105,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">oppure</target>
|
<target state="translated">oppure</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -1347,7 +1359,7 @@
|
|||||||
<target state="translated">Tag</target>
|
<target state="translated">Tag</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1383,7 +1395,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||||
@ -1967,7 +1983,7 @@
|
|||||||
<target state="translated">Funzionalità</target>
|
<target state="translated">Funzionalità</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2614607010577950577" datatype="html">
|
<trans-unit id="2614607010577950577" datatype="html">
|
||||||
@ -3983,7 +3999,7 @@
|
|||||||
<target state="translated">Piattaforme</target>
|
<target state="translated">Piattaforme</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
||||||
@ -4715,7 +4731,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||||
@ -5462,7 +5478,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -6624,7 +6640,7 @@
|
|||||||
<target state="translated">Internazionalizzazione</target>
|
<target state="translated">Internazionalizzazione</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6688,7 +6704,7 @@
|
|||||||
<target state="translated">Visualizza di più</target>
|
<target state="translated">Visualizza di più</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7304,7 +7320,7 @@
|
|||||||
<target state="translated">Oops! Non ho trovato alcun asset.</target>
|
<target state="translated">Oops! Non ho trovato alcun asset.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7320,15 +7336,15 @@
|
|||||||
<target state="translated">NUOVO</target>
|
<target state="translated">NUOVO</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="translated">Imposta API Key</target>
|
<target state="new">Imposta API Key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7339,14 +7355,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="translated"> Notificami </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="translated">Ottieni accesso a oltre 100’000+ titoli da oltre 50 borse</target>
|
<target state="translated">Ottieni accesso a oltre 100’000+ titoli da oltre 50 borse</target>
|
||||||
@ -7453,6 +7461,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -166,7 +166,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -238,7 +242,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1034,7 +1042,7 @@
|
|||||||
<target state="translated">Aanmelden</target>
|
<target state="translated">Aanmelden</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1096,6 +1104,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">of</target>
|
<target state="translated">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -1346,7 +1358,7 @@
|
|||||||
<target state="translated">Tags</target>
|
<target state="translated">Tags</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1382,7 +1394,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||||
@ -1966,7 +1982,7 @@
|
|||||||
<target state="translated">Functionaliteiten</target>
|
<target state="translated">Functionaliteiten</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2614607010577950577" datatype="html">
|
<trans-unit id="2614607010577950577" datatype="html">
|
||||||
@ -3982,7 +3998,7 @@
|
|||||||
<target state="translated">Platforms</target>
|
<target state="translated">Platforms</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
||||||
@ -4714,7 +4730,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||||
@ -5461,7 +5477,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -6623,7 +6639,7 @@
|
|||||||
<target state="new">Internationalization</target>
|
<target state="new">Internationalization</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6687,7 +6703,7 @@
|
|||||||
<target state="new">Show more</target>
|
<target state="new">Show more</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -260,7 +260,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -979,7 +979,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -1083,7 +1087,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -2019,7 +2027,7 @@
|
|||||||
<target state="translated">Platformy</target>
|
<target state="translated">Platformy</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
||||||
@ -2027,7 +2035,7 @@
|
|||||||
<target state="translated">Tagi</target>
|
<target state="translated">Tagi</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -2295,7 +2303,7 @@
|
|||||||
<target state="translated">Zaloguj się</target>
|
<target state="translated">Zaloguj się</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -2481,6 +2489,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">lub</target>
|
<target state="translated">lub</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -3583,7 +3595,7 @@
|
|||||||
<target state="translated">Funkcje</target>
|
<target state="translated">Funkcje</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
||||||
@ -4599,7 +4611,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
||||||
@ -5675,7 +5687,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -6623,7 +6639,7 @@
|
|||||||
<target state="translated">Internacjonalizacja</target>
|
<target state="translated">Internacjonalizacja</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6687,7 +6703,7 @@
|
|||||||
<target state="translated">Pokaż więcej</target>
|
<target state="translated">Pokaż więcej</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -178,7 +178,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -298,7 +302,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1218,7 +1226,7 @@
|
|||||||
<target state="translated">Iniciar sessão</target>
|
<target state="translated">Iniciar sessão</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -1328,6 +1336,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">ou</target>
|
<target state="translated">ou</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -1650,7 +1662,7 @@
|
|||||||
<target state="translated">Marcadores</target>
|
<target state="translated">Marcadores</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1686,7 +1698,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -2298,7 +2314,7 @@
|
|||||||
<target state="translated">Funcionalidades</target>
|
<target state="translated">Funcionalidades</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2614607010577950577" datatype="html">
|
<trans-unit id="2614607010577950577" datatype="html">
|
||||||
@ -3982,7 +3998,7 @@
|
|||||||
<target state="translated">Plataformas</target>
|
<target state="translated">Plataformas</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
<trans-unit id="f4e44195c1fc545934be51e9abfba1202911462a" datatype="html">
|
||||||
@ -4714,7 +4730,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
<trans-unit id="06c1bcff740ab4b1d5283d937d22e9daf8b31933" datatype="html">
|
||||||
@ -5461,7 +5477,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -6623,7 +6639,7 @@
|
|||||||
<target state="new">Internationalization</target>
|
<target state="new">Internationalization</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6687,7 +6703,7 @@
|
|||||||
<target state="new">Show more</target>
|
<target state="new">Show more</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -260,7 +260,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -943,7 +943,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -1047,7 +1051,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1763,7 +1771,7 @@
|
|||||||
<target state="translated">Etiketler</target>
|
<target state="translated">Etiketler</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -1935,7 +1943,7 @@
|
|||||||
<target state="translated">Platformlar</target>
|
<target state="translated">Platformlar</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2817099043823177227" datatype="html">
|
<trans-unit id="2817099043823177227" datatype="html">
|
||||||
@ -2147,7 +2155,7 @@
|
|||||||
<target state="translated">Giriş</target>
|
<target state="translated">Giriş</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -2333,6 +2341,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">veya</target>
|
<target state="translated">veya</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -3135,7 +3147,7 @@
|
|||||||
<target state="translated">Özellikler</target>
|
<target state="translated">Özellikler</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
||||||
@ -4087,7 +4099,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
||||||
@ -5351,7 +5363,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -6623,7 +6639,7 @@
|
|||||||
<target state="new">Internationalization</target>
|
<target state="new">Internationalization</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6687,7 +6703,7 @@
|
|||||||
<target state="new">Show more</target>
|
<target state="new">Show more</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7303,7 +7319,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7319,15 +7335,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7338,14 +7354,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7452,6 +7460,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -255,7 +255,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -951,7 +951,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -1052,7 +1056,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -1917,14 +1925,14 @@
|
|||||||
<source>Platforms</source>
|
<source>Platforms</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
||||||
<source>Tags</source>
|
<source>Tags</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -2165,7 +2173,7 @@
|
|||||||
<source>Sign in</source>
|
<source>Sign in</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -2331,6 +2339,10 @@
|
|||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -3326,7 +3338,7 @@
|
|||||||
<source>Features</source>
|
<source>Features</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
||||||
@ -4231,7 +4243,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
||||||
@ -5237,7 +5249,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -6016,7 +6032,7 @@
|
|||||||
<source>Internationalization</source>
|
<source>Internationalization</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3c1ef66d62e3ecb5f661c8ffb89e1b1c46275684" datatype="html">
|
<trans-unit id="3c1ef66d62e3ecb5f661c8ffb89e1b1c46275684" datatype="html">
|
||||||
@ -6072,7 +6088,7 @@
|
|||||||
<source>Show more</source>
|
<source>Show more</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3514960995395821133" datatype="html">
|
<trans-unit id="3514960995395821133" datatype="html">
|
||||||
@ -6611,7 +6627,7 @@
|
|||||||
<source>Oops! Could not find any assets.</source>
|
<source>Oops! Could not find any assets.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -6621,13 +6637,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="4346283537747431562" datatype="html">
|
<trans-unit id="4346283537747431562" datatype="html">
|
||||||
<source>Ukraine</source>
|
<source>Ukraine</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@ -6635,11 +6644,11 @@
|
|||||||
<context context-type="linenumber">92</context>
|
<context context-type="linenumber">92</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
@ -6653,7 +6662,7 @@
|
|||||||
<source>NEW</source>
|
<source>NEW</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -6744,6 +6753,55 @@
|
|||||||
<context context-type="linenumber">5</context>
|
<context context-type="linenumber">5</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -261,7 +261,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
<context context-type="linenumber">48</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -988,7 +988,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">12</context>
|
<context context-type="linenumber">16</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
<trans-unit id="d04d5b5d13ac9acf9750f1807f0227eeee98b247" datatype="html">
|
||||||
@ -1092,7 +1096,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">25</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">102</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
<trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">
|
||||||
@ -2036,7 +2044,7 @@
|
|||||||
<target state="translated">平台</target>
|
<target state="translated">平台</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">39</context>
|
<context context-type="linenumber">59</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
<trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">
|
||||||
@ -2044,7 +2052,7 @@
|
|||||||
<target state="translated">标签</target>
|
<target state="translated">标签</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">45</context>
|
<context context-type="linenumber">65</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
|
||||||
@ -2312,7 +2320,7 @@
|
|||||||
<target state="translated">登入</target>
|
<target state="translated">登入</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">141</context>
|
<context context-type="linenumber">150</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
|
||||||
@ -2498,6 +2506,10 @@
|
|||||||
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
<trans-unit id="053e81597467a642e04109eebe934c84e6a1f467" datatype="html">
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<target state="translated">或</target>
|
<target state="translated">或</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">35</context>
|
||||||
|
</context-group>
|
||||||
<context-group purpose="location">
|
<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>
|
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||||
<context context-type="linenumber">31</context>
|
<context context-type="linenumber">31</context>
|
||||||
@ -3600,7 +3612,7 @@
|
|||||||
<target state="translated">功能</target>
|
<target state="translated">功能</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">65</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
<trans-unit id="b942ec19956854206b38d6bbd66eddb69f09c135" datatype="html">
|
||||||
@ -4616,7 +4628,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">181</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
<trans-unit id="7f91b999bb17e8c3eab04fd5b3471cceeecb2f5c" datatype="html">
|
||||||
@ -5740,7 +5752,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">46</context>
|
<context context-type="linenumber">40</context>
|
||||||
|
</context-group>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
<trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html">
|
||||||
@ -6624,7 +6640,7 @@
|
|||||||
<target state="new">Internationalization</target>
|
<target state="new">Internationalization</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
<context context-type="sourcefile">apps/client/src/app/app-routing.module.ts</context>
|
||||||
<context context-type="linenumber">79</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4941836956820527118" datatype="html">
|
<trans-unit id="4941836956820527118" datatype="html">
|
||||||
@ -6688,7 +6704,7 @@
|
|||||||
<target state="new">Show more</target>
|
<target state="new">Show more</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/top-holdings/top-holdings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">174</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="829826868886560502" datatype="html">
|
<trans-unit id="829826868886560502" datatype="html">
|
||||||
@ -7304,7 +7320,7 @@
|
|||||||
<target state="new">Oops! Could not find any assets.</target>
|
<target state="new">Oops! Could not find any assets.</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
<context context-type="sourcefile">libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">40</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
<trans-unit id="be839b9dc1563aec0f80f5b55c8bde1a1dd10ca1" datatype="html">
|
||||||
@ -7320,15 +7336,15 @@
|
|||||||
<target state="new">NEW</target>
|
<target state="new">NEW</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">14</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="66cbb0c1695dc25d22f824b62f0ffb9435ec8c4b" datatype="html">
|
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
|
||||||
<source>Set API Key</source>
|
<source>Set API key</source>
|
||||||
<target state="new">Set API Key</target>
|
<target state="new">Set API key</target>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">48</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
<trans-unit id="2fcf96765ae87821e12fe4f6900ba1a218742cfc" datatype="html">
|
||||||
@ -7339,14 +7355,6 @@
|
|||||||
<context context-type="linenumber">23</context>
|
<context context-type="linenumber">23</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3a0843b9fa08ab1d2294e2b5bd60042052ab8d10" datatype="html">
|
|
||||||
<source> Notify me </source>
|
|
||||||
<target state="new"> Notify me </target>
|
|
||||||
<context-group purpose="location">
|
|
||||||
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
|
||||||
<context context-type="linenumber">32</context>
|
|
||||||
</context-group>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="8908015589937012101" datatype="html">
|
<trans-unit id="8908015589937012101" datatype="html">
|
||||||
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
<source>Get access to 100’000+ tickers from over 50 exchanges</source>
|
||||||
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
<target state="new">Get access to 100’000+ tickers from over 50 exchanges</target>
|
||||||
@ -7453,6 +7461,62 @@
|
|||||||
<context context-type="linenumber">69</context>
|
<context context-type="linenumber">69</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
|
||||||
|
<source>of</source>
|
||||||
|
<target state="new">of</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">29</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
|
||||||
|
<source>daily requests</source>
|
||||||
|
<target state="new">daily requests</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">31</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
|
||||||
|
<source>Remove API key</source>
|
||||||
|
<target state="new">Remove API key</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
|
||||||
|
<context context-type="linenumber">38</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="5649402767950535555" datatype="html">
|
||||||
|
<source>Do you really want to delete the API key?</source>
|
||||||
|
<target state="new">Do you really want to delete the API key?</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
|
||||||
|
<context context-type="linenumber">80</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1486033335993102285" datatype="html">
|
||||||
|
<source>Please enter your Ghostfolio API key:</source>
|
||||||
|
<target state="new">Please enter your Ghostfolio API key:</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
|
||||||
|
<context context-type="linenumber">45</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="1b53d197b1067954e0c294f6884e74edacc0c644" datatype="html">
|
||||||
|
<source>Notify me</source>
|
||||||
|
<target state="new">Notify me</target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">32</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
|
||||||
|
<source> I have an API key </source>
|
||||||
|
<target state="new"> I have an API key </target>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
|
||||||
|
<context context-type="linenumber">42</context>
|
||||||
|
</context-group>
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
@ -106,17 +106,21 @@ export const PORTFOLIO_SNAPSHOT_PROCESS_JOB_OPTIONS: JobOptions = {
|
|||||||
export const HEADER_KEY_IMPERSONATION = 'Impersonation-Id';
|
export const HEADER_KEY_IMPERSONATION = 'Impersonation-Id';
|
||||||
export const HEADER_KEY_TIMEZONE = 'Timezone';
|
export const HEADER_KEY_TIMEZONE = 'Timezone';
|
||||||
export const HEADER_KEY_TOKEN = 'Authorization';
|
export const HEADER_KEY_TOKEN = 'Authorization';
|
||||||
|
export const HEADER_KEY_SKIP_INTERCEPTOR = 'X-Skip-Interceptor';
|
||||||
|
|
||||||
export const MAX_TOP_HOLDINGS = 50;
|
export const MAX_TOP_HOLDINGS = 50;
|
||||||
|
|
||||||
export const NUMERICAL_PRECISION_THRESHOLD = 100000;
|
export const NUMERICAL_PRECISION_THRESHOLD = 100000;
|
||||||
|
|
||||||
|
export const PROPERTY_API_KEY_GHOSTFOLIO = 'API_KEY_GHOSTFOLIO';
|
||||||
export const PROPERTY_BENCHMARKS = 'BENCHMARKS';
|
export const PROPERTY_BENCHMARKS = 'BENCHMARKS';
|
||||||
export const PROPERTY_BETTER_UPTIME_MONITOR_ID = 'BETTER_UPTIME_MONITOR_ID';
|
export const PROPERTY_BETTER_UPTIME_MONITOR_ID = 'BETTER_UPTIME_MONITOR_ID';
|
||||||
export const PROPERTY_COUNTRIES_OF_SUBSCRIBERS = 'COUNTRIES_OF_SUBSCRIBERS';
|
export const PROPERTY_COUNTRIES_OF_SUBSCRIBERS = 'COUNTRIES_OF_SUBSCRIBERS';
|
||||||
export const PROPERTY_COUPONS = 'COUPONS';
|
export const PROPERTY_COUPONS = 'COUPONS';
|
||||||
export const PROPERTY_CURRENCIES = 'CURRENCIES';
|
export const PROPERTY_CURRENCIES = 'CURRENCIES';
|
||||||
export const PROPERTY_DATA_SOURCE_MAPPING = 'DATA_SOURCE_MAPPING';
|
export const PROPERTY_DATA_SOURCE_MAPPING = 'DATA_SOURCE_MAPPING';
|
||||||
|
export const PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS =
|
||||||
|
'DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS';
|
||||||
export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
|
export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
|
||||||
export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED';
|
export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED';
|
||||||
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
|
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
|
||||||
|
@ -40,13 +40,16 @@ import type { Position } from './position.interface';
|
|||||||
import type { Product } from './product';
|
import type { Product } from './product';
|
||||||
import type { AccountBalancesResponse } from './responses/account-balances-response.interface';
|
import type { AccountBalancesResponse } from './responses/account-balances-response.interface';
|
||||||
import type { BenchmarkResponse } from './responses/benchmark-response.interface';
|
import type { BenchmarkResponse } from './responses/benchmark-response.interface';
|
||||||
|
import type { DataProviderGhostfolioStatusResponse } from './responses/data-provider-ghostfolio-status-response.interface';
|
||||||
import type { ResponseError } from './responses/errors.interface';
|
import type { ResponseError } from './responses/errors.interface';
|
||||||
|
import type { HistoricalResponse } from './responses/historical-response.interface';
|
||||||
import type { ImportResponse } from './responses/import-response.interface';
|
import type { ImportResponse } from './responses/import-response.interface';
|
||||||
import type { LookupResponse } from './responses/lookup-response.interface';
|
import type { LookupResponse } from './responses/lookup-response.interface';
|
||||||
import type { OAuthResponse } from './responses/oauth-response.interface';
|
import type { OAuthResponse } from './responses/oauth-response.interface';
|
||||||
import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface';
|
import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface';
|
||||||
import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface';
|
import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface';
|
||||||
import type { PublicPortfolioResponse } from './responses/public-portfolio-response.interface';
|
import type { PublicPortfolioResponse } from './responses/public-portfolio-response.interface';
|
||||||
|
import type { QuotesResponse } from './responses/quotes-response.interface';
|
||||||
import type { ScraperConfiguration } from './scraper-configuration.interface';
|
import type { ScraperConfiguration } from './scraper-configuration.interface';
|
||||||
import type { Statistics } from './statistics.interface';
|
import type { Statistics } from './statistics.interface';
|
||||||
import type { SubscriptionOffer } from './subscription-offer.interface';
|
import type { SubscriptionOffer } from './subscription-offer.interface';
|
||||||
@ -74,12 +77,14 @@ export {
|
|||||||
BenchmarkProperty,
|
BenchmarkProperty,
|
||||||
BenchmarkResponse,
|
BenchmarkResponse,
|
||||||
Coupon,
|
Coupon,
|
||||||
|
DataProviderGhostfolioStatusResponse,
|
||||||
DataProviderInfo,
|
DataProviderInfo,
|
||||||
EnhancedSymbolProfile,
|
EnhancedSymbolProfile,
|
||||||
Export,
|
Export,
|
||||||
Filter,
|
Filter,
|
||||||
FilterGroup,
|
FilterGroup,
|
||||||
HistoricalDataItem,
|
HistoricalDataItem,
|
||||||
|
HistoricalResponse,
|
||||||
Holding,
|
Holding,
|
||||||
HoldingWithParents,
|
HoldingWithParents,
|
||||||
ImportResponse,
|
ImportResponse,
|
||||||
@ -105,6 +110,7 @@ export {
|
|||||||
Position,
|
Position,
|
||||||
Product,
|
Product,
|
||||||
PublicPortfolioResponse,
|
PublicPortfolioResponse,
|
||||||
|
QuotesResponse,
|
||||||
ResponseError,
|
ResponseError,
|
||||||
ScraperConfiguration,
|
ScraperConfiguration,
|
||||||
Statistics,
|
Statistics,
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
export interface DataProviderGhostfolioStatusResponse {
|
||||||
|
dailyRequests: number;
|
||||||
|
dailyRequestsMax: number;
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||||
|
|
||||||
|
export interface HistoricalResponse {
|
||||||
|
historicalData: {
|
||||||
|
[date: string]: IDataProviderHistoricalResponse;
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
import { IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||||
|
|
||||||
|
export interface QuotesResponse {
|
||||||
|
quotes: { [symbol: string]: IDataProviderResponse };
|
||||||
|
}
|
@ -22,6 +22,7 @@ export const permissions = {
|
|||||||
deletePlatform: 'deletePlatform',
|
deletePlatform: 'deletePlatform',
|
||||||
deleteTag: 'deleteTag',
|
deleteTag: 'deleteTag',
|
||||||
deleteUser: 'deleteUser',
|
deleteUser: 'deleteUser',
|
||||||
|
enableDataProviderGhostfolio: 'enableDataProviderGhostfolio',
|
||||||
enableFearAndGreedIndex: 'enableFearAndGreedIndex',
|
enableFearAndGreedIndex: 'enableFearAndGreedIndex',
|
||||||
enableImport: 'enableImport',
|
enableImport: 'enableImport',
|
||||||
enableBlog: 'enableBlog',
|
enableBlog: 'enableBlog',
|
||||||
|
@ -9,6 +9,7 @@ export type UserWithSettings = User & {
|
|||||||
Access: Access[];
|
Access: Access[];
|
||||||
Account: Account[];
|
Account: Account[];
|
||||||
activityCount: number;
|
activityCount: number;
|
||||||
|
dataProviderGhostfolioDailyRequests: number;
|
||||||
permissions?: string[];
|
permissions?: string[];
|
||||||
Settings: Settings & { settings: UserSettings };
|
Settings: Settings & { settings: UserSettings };
|
||||||
subscription?: {
|
subscription?: {
|
||||||
|
@ -29,6 +29,9 @@
|
|||||||
@if (lookupItem.assetSubClass) {
|
@if (lookupItem.assetSubClass) {
|
||||||
· {{ lookupItem.assetSubClassString }}
|
· {{ lookupItem.assetSubClassString }}
|
||||||
}
|
}
|
||||||
|
@if (lookupItem.dataProviderInfo.name) {
|
||||||
|
· {{ lookupItem.dataProviderInfo.name }}
|
||||||
|
}
|
||||||
</small>
|
</small>
|
||||||
</mat-option>
|
</mat-option>
|
||||||
} @empty {
|
} @empty {
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
-- AlterEnum
|
||||||
|
ALTER TYPE "DataSource" ADD VALUE 'GHOSTFOLIO';
|
@ -281,6 +281,7 @@ enum DataSource {
|
|||||||
COINGECKO
|
COINGECKO
|
||||||
EOD_HISTORICAL_DATA
|
EOD_HISTORICAL_DATA
|
||||||
FINANCIAL_MODELING_PREP
|
FINANCIAL_MODELING_PREP
|
||||||
|
GHOSTFOLIO
|
||||||
GOOGLE_SHEETS
|
GOOGLE_SHEETS
|
||||||
MANUAL
|
MANUAL
|
||||||
RAPID_API
|
RAPID_API
|
||||||
|
Loading…
x
Reference in New Issue
Block a user