Eliminate duplicate locales (#1176)
This commit is contained in:
parent
2e6a7d5a91
commit
11136ae4f8
@ -43,8 +43,8 @@
|
||||
<ion-icon name="ellipsis-vertical"></ion-icon>
|
||||
</button>
|
||||
<mat-menu #transactionMenu="matMenu" xPosition="before">
|
||||
<button i18n mat-menu-item (click)="onDeleteAccess(element.id)">
|
||||
Revoke
|
||||
<button mat-menu-item (click)="onDeleteAccess(element.id)">
|
||||
<ng-container i18n>Revoke</ng-container>
|
||||
</button>
|
||||
</mat-menu>
|
||||
</td>
|
||||
|
@ -19,13 +19,8 @@
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="currency">
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
>
|
||||
Currency
|
||||
<th *matHeaderCellDef class="d-none d-lg-table-cell px-1" mat-header-cell>
|
||||
<ng-container i18n>Currency</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||
{{ element.currency }}
|
||||
@ -36,13 +31,8 @@
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="platform">
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
>
|
||||
Platform
|
||||
<th *matHeaderCellDef class="d-none d-lg-table-cell px-1" mat-header-cell>
|
||||
<ng-container i18n>Platform</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||
<div class="d-flex">
|
||||
@ -81,10 +71,9 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1 text-right"
|
||||
i18n
|
||||
mat-header-cell
|
||||
>
|
||||
Cash Balance
|
||||
<ng-container i18n>Cash Balance</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -116,10 +105,9 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1 text-right"
|
||||
i18n
|
||||
mat-header-cell
|
||||
>
|
||||
Value
|
||||
<ng-container i18n>Value</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -151,10 +139,9 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-lg-none d-xl-none px-1 text-right"
|
||||
i18n
|
||||
mat-header-cell
|
||||
>
|
||||
Value
|
||||
<ng-container i18n>Value</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
|
@ -105,19 +105,18 @@
|
||||
<ion-icon name="ellipsis-vertical"></ion-icon>
|
||||
</button>
|
||||
<mat-menu #accountMenu="matMenu" xPosition="before">
|
||||
<button i18n mat-menu-item (click)="onViewData(job.data)">
|
||||
View Data
|
||||
<button mat-menu-item (click)="onViewData(job.data)">
|
||||
<ng-container i18n>View Data</ng-container>
|
||||
</button>
|
||||
<button
|
||||
i18n
|
||||
mat-menu-item
|
||||
[disabled]="job.stacktrace?.length <= 0"
|
||||
(click)="onViewStacktrace(job.stacktrace)"
|
||||
>
|
||||
View Stacktrace
|
||||
<ng-container i18n>View Stacktrace</ng-container>
|
||||
</button>
|
||||
<button i18n mat-menu-item (click)="onDeleteJob(job.id)">
|
||||
Delete Job
|
||||
<button mat-menu-item (click)="onDeleteJob(job.id)">
|
||||
<ng-container i18n>Delete Job</ng-container>
|
||||
</button>
|
||||
</mat-menu>
|
||||
</td>
|
||||
|
@ -43,8 +43,8 @@
|
||||
</div>
|
||||
<div class="justify-content-end" mat-dialog-actions>
|
||||
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
||||
<button color="primary" i18n mat-flat-button (click)="onUpdate()">
|
||||
Save
|
||||
<button color="primary" mat-flat-button (click)="onUpdate()">
|
||||
<ng-container i18n>Save</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -36,26 +36,23 @@
|
||||
</button>
|
||||
<mat-menu #accountMenu="matMenu" xPosition="before">
|
||||
<button
|
||||
i18n
|
||||
mat-menu-item
|
||||
(click)="onGatherSymbol({dataSource: item.dataSource, symbol: item.symbol})"
|
||||
>
|
||||
Gather Data
|
||||
<ng-container i18n>Gather Data</ng-container>
|
||||
</button>
|
||||
<button
|
||||
i18n
|
||||
mat-menu-item
|
||||
(click)="onGatherProfileDataBySymbol({dataSource: item.dataSource, symbol: item.symbol})"
|
||||
>
|
||||
Gather Profile Data
|
||||
<ng-container i18n>Gather Profile Data</ng-container>
|
||||
</button>
|
||||
<button
|
||||
i18n
|
||||
mat-menu-item
|
||||
[disabled]="item.activityCount !== 0"
|
||||
(click)="onDeleteProfileData({dataSource: item.dataSource, symbol: item.symbol})"
|
||||
>
|
||||
Delete Profile Data
|
||||
<ng-container i18n>Delete Profile Data</ng-container>
|
||||
</button>
|
||||
</mat-menu>
|
||||
</td>
|
||||
|
@ -7,17 +7,17 @@
|
||||
<tr class="mat-header-row">
|
||||
<th class="mat-header-cell px-1 py-2 text-right">#</th>
|
||||
<th class="mat-header-cell px-1 py-2" i18n>User</th>
|
||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
||||
Registration
|
||||
<th class="mat-header-cell px-1 py-2 text-right">
|
||||
<ng-container i18n>Registration</ng-container>
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
||||
Accounts
|
||||
<th class="mat-header-cell px-1 py-2 text-right">
|
||||
<ng-container i18n>Accounts</ng-container>
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
||||
Activities
|
||||
<th class="mat-header-cell px-1 py-2 text-right">
|
||||
<ng-container i18n>Activities</ng-container>
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
||||
Engagement per Day
|
||||
<th class="mat-header-cell px-1 py-2 text-right">
|
||||
<ng-container i18n>Engagement per Day</ng-container>
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
|
||||
<th class="mat-header-cell px-1 py-2"></th>
|
||||
|
@ -285,17 +285,16 @@
|
||||
mat-flat-button
|
||||
><ion-icon name="logo-github"></ion-icon
|
||||
></a>
|
||||
<button class="mx-1" i18n mat-flat-button (click)="openLoginDialog()">
|
||||
Sign In
|
||||
<button class="mx-1" mat-flat-button (click)="openLoginDialog()">
|
||||
<ng-container i18n>Sign In</ng-container>
|
||||
</button>
|
||||
<a
|
||||
*ngIf="currentRoute !== 'register' && !info?.isReadOnlyMode"
|
||||
class="d-none d-sm-block"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[routerLink]="['/register']"
|
||||
>Get Started
|
||||
><ng-container i18n>Get Started</ng-container>
|
||||
</a>
|
||||
</ng-container>
|
||||
</mat-toolbar>
|
||||
|
@ -49,12 +49,11 @@
|
||||
<div>
|
||||
<button
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[disabled]="!data.accessToken"
|
||||
[mat-dialog-close]="data"
|
||||
>
|
||||
Sign in
|
||||
<ng-container i18n>Sign in</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -18,8 +18,8 @@
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="symbol">
|
||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
||||
Symbol
|
||||
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||
<ng-container i18n>Symbol</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||
<span [title]="element.name">{{ element.symbol | gfSymbol }}</span>
|
||||
@ -30,11 +30,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Name
|
||||
<ng-container i18n>Name</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||
<ng-container *ngIf="element.name !== element.symbol">{{
|
||||
@ -47,11 +46,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Value
|
||||
<ng-container i18n>Value</ng-container>
|
||||
</th>
|
||||
<td class="d-none d-lg-table-cell px-1" mat-cell *matCellDef="let element">
|
||||
<div class="d-flex justify-content-end">
|
||||
@ -68,11 +66,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Allocation
|
||||
<ng-container i18n>Allocation</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||
<div class="d-flex justify-content-end">
|
||||
@ -89,10 +86,9 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1 text-right"
|
||||
i18n
|
||||
mat-header-cell
|
||||
>
|
||||
Performance
|
||||
<ng-container i18n>Performance</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||
<div class="d-flex justify-content-end">
|
||||
@ -137,8 +133,8 @@
|
||||
*ngIf="dataSource.data.length > pageSize && !isLoading"
|
||||
class="my-3 text-center"
|
||||
>
|
||||
<button i18n mat-stroked-button (click)="onShowAllPositions()">
|
||||
Show all
|
||||
<button mat-stroked-button (click)="onShowAllPositions()">
|
||||
<ng-container i18n>Show all</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div class="container">
|
||||
<div class="mb-5 row">
|
||||
<div class="col">
|
||||
<h3 class="d-flex justify-content-center mb-3" i18n>About Ghostfolio</h3>
|
||||
<h3 class="d-flex justify-content-center mb-3">About Ghostfolio</h3>
|
||||
<div class="about-container">
|
||||
<p>
|
||||
Ghostfolio is a lightweight wealth management application for
|
||||
@ -21,7 +21,7 @@
|
||||
<ng-container *ngIf="version">
|
||||
This instance is running Ghostfolio {{ version }}.
|
||||
</ng-container>
|
||||
<ng-container *ngIf="hasPermissionForStatistics" i18n
|
||||
<ng-container *ngIf="hasPermissionForStatistics"
|
||||
>Check the system status at
|
||||
<a href="https://status.ghostfol.io" title="Ghostfolio status"
|
||||
>status.ghostfol.io</a
|
||||
@ -102,7 +102,7 @@
|
||||
|
||||
<div *ngIf="hasPermissionForStatistics" class="mb-5 row">
|
||||
<div class="col">
|
||||
<h3 class="mb-3 text-center" i18n>Ghostfolio in Numbers</h3>
|
||||
<h3 class="mb-3 text-center">Ghostfolio in Numbers</h3>
|
||||
<mat-card>
|
||||
<mat-card-content>
|
||||
<div class="row">
|
||||
@ -177,7 +177,6 @@
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-stroked-button
|
||||
[routerLink]="['/faq']"
|
||||
>FAQ</a
|
||||
@ -190,7 +189,6 @@
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-stroked-button
|
||||
[routerLink]="['/about', 'changelog']"
|
||||
>Changelog & License</a
|
||||
@ -200,7 +198,6 @@
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-stroked-button
|
||||
[routerLink]="['/about', 'privacy-policy']"
|
||||
>Privacy Policy</a
|
||||
@ -210,7 +207,6 @@
|
||||
<a
|
||||
class="py-2 w-100"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[routerLink]="['/blog']"
|
||||
>Blog</a
|
||||
|
@ -31,11 +31,10 @@
|
||||
<ng-container *ngIf="hasPermissionForSubscription">
|
||||
<button
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
(click)="onCheckout(priceId)"
|
||||
>
|
||||
Upgrade
|
||||
<ng-container i18n>Upgrade</ng-container>
|
||||
</button>
|
||||
<div *ngIf="price" class="mt-1">
|
||||
<ng-container *ngIf="coupon"
|
||||
@ -91,8 +90,8 @@
|
||||
<div class="d-flex mt-4 py-1">
|
||||
<form #changeUserSettingsForm="ngForm" class="w-100">
|
||||
<div class="d-flex mb-2">
|
||||
<div class="align-items-center d-flex pt-1 pt-1 w-50" i18n>
|
||||
Base Currency
|
||||
<div class="align-items-center d-flex pt-1 pt-1 w-50">
|
||||
<ng-container i18n>Base Currency</ng-container>
|
||||
</div>
|
||||
<div class="pl-1 w-50">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -132,8 +131,8 @@
|
||||
<div class="align-items-center d-flex mb-2">
|
||||
<div class="pr-1 w-50">
|
||||
<div i18n>Locale</div>
|
||||
<div class="hint-text text-muted" i18n>
|
||||
Date and number format
|
||||
<div class="hint-text text-muted">
|
||||
<ng-container i18n>Date and number format</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pl-1 w-50">
|
||||
@ -155,8 +154,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
<div class="align-items-center d-flex pr-1 pt-1 w-50" i18n>
|
||||
View Mode
|
||||
<div class="align-items-center d-flex pr-1 pt-1 w-50">
|
||||
<ng-container i18n>View Mode</ng-container>
|
||||
</div>
|
||||
<div class="pl-1 w-50">
|
||||
<div class="align-items-center d-flex overflow-hidden">
|
||||
|
@ -14,12 +14,11 @@
|
||||
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
||||
<button
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[disabled]="!addAccessForm.form.valid"
|
||||
[mat-dialog-close]="data"
|
||||
>
|
||||
Save
|
||||
<ng-container i18n>Save</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -66,12 +66,11 @@
|
||||
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
||||
<button
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[disabled]="!addAccountForm.form.valid"
|
||||
[mat-dialog-close]="data"
|
||||
>
|
||||
Save
|
||||
<ng-container i18n>Save</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -1,36 +1,34 @@
|
||||
<div class="container">
|
||||
<div class="mb-5 row">
|
||||
<div class="col">
|
||||
<h3 class="mb-3 text-center" i18n>Frequently Asked Questions (FAQ)</h3>
|
||||
<h3 class="mb-3 text-center">Frequently Asked Questions (FAQ)</h3>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>What is Ghostfolio?</mat-card-title>
|
||||
<mat-card-content i18n>
|
||||
<mat-card-title>What is Ghostfolio?</mat-card-title>
|
||||
<mat-card-content>
|
||||
Ghostfolio is a lightweight, open source wealth management application
|
||||
for individuals to keep track of their net worth. The software
|
||||
empowers you to make solid, data-driven investment decisions.
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n
|
||||
<mat-card-title
|
||||
>What assets can I track with Ghostfolio?</mat-card-title
|
||||
>
|
||||
<mat-card-content i18n>
|
||||
<mat-card-content>
|
||||
With Ghostfolio, you can keep track of various assets like stocks,
|
||||
ETFs or cryptocurrencies.
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n
|
||||
>What else is included in Ghostfolio?</mat-card-title
|
||||
>
|
||||
<mat-card-content i18n>
|
||||
<mat-card-title>What else is included in Ghostfolio?</mat-card-title>
|
||||
<mat-card-content>
|
||||
Please find a feature overview to manage your wealth
|
||||
<a [routerLink]="['/features']">here</a>.
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>How do I start?</mat-card-title>
|
||||
<mat-card-content i18n>
|
||||
<mat-card-title>How do I start?</mat-card-title>
|
||||
<mat-card-content>
|
||||
You can sign up via the “<a [routerLink]="['/register']"
|
||||
>Get Started</a
|
||||
>” button at the top of the page. You have multiple options to join
|
||||
@ -42,8 +40,8 @@
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>Can I use Ghostfolio anonymously?</mat-card-title>
|
||||
<mat-card-content i18n>
|
||||
<mat-card-title>Can I use Ghostfolio anonymously?</mat-card-title>
|
||||
<mat-card-content>
|
||||
Yes, the authentication systems (via security token or
|
||||
<a href="../en/blog/2022/07/ghostfolio-meets-internet-identity"
|
||||
>Internet Identity</a
|
||||
@ -52,8 +50,8 @@
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>How can Ghostfolio be free?</mat-card-title>
|
||||
<mat-card-content i18n
|
||||
<mat-card-title>How can Ghostfolio be free?</mat-card-title>
|
||||
<mat-card-content
|
||||
>This project is driven by the efforts of contributors from around the
|
||||
world. The
|
||||
<a href="https://github.com/ghostfolio/ghostfolio">source code</a> is
|
||||
@ -64,16 +62,16 @@
|
||||
>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>Is it really free?</mat-card-title>
|
||||
<mat-card-content i18n
|
||||
<mat-card-title>Is it really free?</mat-card-title>
|
||||
<mat-card-content
|
||||
>Yes, it is! Our
|
||||
<a [routerLink]="['/pricing']">pricing page</a> details everything you
|
||||
get for free.</mat-card-content
|
||||
>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>What is Ghostfolio Premium?</mat-card-title>
|
||||
<mat-card-content i18n
|
||||
<mat-card-title>What is Ghostfolio Premium?</mat-card-title>
|
||||
<mat-card-content
|
||||
><a [routerLink]="['/pricing']">Ghostfolio Premium</a> is a fully
|
||||
managed Ghostfolio cloud offering for ambitious investors. The revenue
|
||||
is used to cover the hosting infrastructure. It is the Open Source
|
||||
@ -81,8 +79,8 @@
|
||||
>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>Can I start with a trial version?</mat-card-title>
|
||||
<mat-card-content i18n
|
||||
<mat-card-title>Can I start with a trial version?</mat-card-title>
|
||||
<mat-card-content
|
||||
>Yes, you can try
|
||||
<a [routerLink]="['/pricing']">Ghostfolio Premium</a> by signing up
|
||||
for Ghostfolio and applying for a trial (see “My Ghostfolio”). It’s
|
||||
@ -91,8 +89,8 @@
|
||||
>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>Which devices are supported?</mat-card-title>
|
||||
<mat-card-content i18n
|
||||
<mat-card-title>Which devices are supported?</mat-card-title>
|
||||
<mat-card-content
|
||||
>Ghostfolio works in every modern web browser on smartphones, tablets
|
||||
and desktop computers (where you have even more analysis options and
|
||||
statistics). For Android users, there is a dedicated Ghostfolio app
|
||||
@ -104,10 +102,10 @@
|
||||
>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n
|
||||
<mat-card-title
|
||||
>Ghostfolio sounds cool, how can I get involved?</mat-card-title
|
||||
>
|
||||
<mat-card-content i18n
|
||||
<mat-card-content
|
||||
>Any support for Ghostfolio is welcome. Be it with a
|
||||
<a [routerLink]="['/pricing']">Ghostfolio Premium</a> subscription to
|
||||
finance the hosting, a positive rating in the
|
||||
@ -124,8 +122,8 @@
|
||||
>
|
||||
</mat-card>
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-title i18n>Got any other questions?</mat-card-title>
|
||||
<mat-card-content i18n
|
||||
<mat-card-title>Got any other questions?</mat-card-title>
|
||||
<mat-card-content
|
||||
>Join the Ghostfolio
|
||||
<a
|
||||
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
|
||||
|
@ -1,9 +1,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3 class="d-flex justify-content-center mb-3 text-center" i18n>
|
||||
Features
|
||||
</h3>
|
||||
<h3 class="d-flex justify-content-center mb-3 text-center">Features</h3>
|
||||
<div class="mb-4">
|
||||
<p>
|
||||
Check out the numerous features of <strong>Ghostfolio</strong> to
|
||||
@ -14,7 +12,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Stocks</h4>
|
||||
<h4>Stocks</h4>
|
||||
<p class="m-0">Keep track of your stock purchases and sales.</p>
|
||||
</div>
|
||||
</mat-card>
|
||||
@ -22,7 +20,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>ETFs</h4>
|
||||
<h4>ETFs</h4>
|
||||
<p class="m-0">
|
||||
Are you into ETFs (Exchange Traded Funds)? Track your ETF
|
||||
investments.
|
||||
@ -33,7 +31,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Bonds</h4>
|
||||
<h4>Bonds</h4>
|
||||
<p class="m-0">
|
||||
Manage your investment in bonds and other assets with fixed
|
||||
income.
|
||||
@ -44,7 +42,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Cryptocurrencies</h4>
|
||||
<h4>Cryptocurrencies</h4>
|
||||
<p class="m-0">
|
||||
Keep track of your Bitcoin and Altcoin holdings.
|
||||
</p>
|
||||
@ -54,7 +52,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Dividend</h4>
|
||||
<h4>Dividend</h4>
|
||||
<p class="m-0">
|
||||
Are you building a dividend portfolio? Track your dividend in
|
||||
Ghostfolio.
|
||||
@ -65,7 +63,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex" i18n>Wealth Items</h4>
|
||||
<h4 class="align-items-center d-flex">Wealth Items</h4>
|
||||
<p class="m-0">
|
||||
Track all your treasuries, be it your luxury watch or rare
|
||||
trading cards.
|
||||
@ -76,7 +74,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex" i18n>Emergency Fund</h4>
|
||||
<h4 class="align-items-center d-flex">Emergency Fund</h4>
|
||||
<p class="m-0">
|
||||
Define your emergency fund you are comfortable with for
|
||||
difficult times.
|
||||
@ -87,7 +85,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex" i18n>Import and Export</h4>
|
||||
<h4 class="align-items-center d-flex">Import and Export</h4>
|
||||
<p class="m-0">Import and export your investment activities.</p>
|
||||
</div>
|
||||
</mat-card>
|
||||
@ -95,7 +93,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Multi-Accounts</h4>
|
||||
<h4>Multi-Accounts</h4>
|
||||
<p class="m-0">
|
||||
Keep an eye on all your accounts across multiple platforms
|
||||
(multi-banking).
|
||||
@ -107,7 +105,7 @@
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex">
|
||||
<span i18n>Portfolio Calculations</span>
|
||||
<span>Portfolio Calculations</span>
|
||||
<gf-premium-indicator
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="ml-1"
|
||||
@ -125,7 +123,7 @@
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex">
|
||||
<span i18n>Portfolio Allocations</span>
|
||||
<span>Portfolio Allocations</span>
|
||||
<gf-premium-indicator
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="ml-1"
|
||||
@ -141,7 +139,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex" i18n>Dark Mode</h4>
|
||||
<h4 class="align-items-center d-flex">Dark Mode</h4>
|
||||
<p class="m-0">
|
||||
Ghostfolio automatically switches to a dark color theme based on
|
||||
your operating system's preferences.
|
||||
@ -152,7 +150,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex" i18n>Zen Mode</h4>
|
||||
<h4 class="align-items-center d-flex">Zen Mode</h4>
|
||||
<p class="m-0">
|
||||
Keep calm and activate Zen Mode if the markets are going crazy.
|
||||
</p>
|
||||
@ -166,7 +164,7 @@
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex">
|
||||
<span i18n>Market Mood</span>
|
||||
<span>Market Mood</span>
|
||||
<gf-premium-indicator class="ml-1"></gf-premium-indicator>
|
||||
</h4>
|
||||
<p class="m-0">
|
||||
@ -181,7 +179,7 @@
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex">
|
||||
<span i18n>Static Analysis</span>
|
||||
<span>Static Analysis</span>
|
||||
<gf-premium-indicator
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="ml-1"
|
||||
@ -197,7 +195,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Community</h4>
|
||||
<h4>Community</h4>
|
||||
<p class="m-0">
|
||||
Join the Ghostfolio
|
||||
<a
|
||||
@ -214,7 +212,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Open Source Software</h4>
|
||||
<h4>Open Source Software</h4>
|
||||
<p class="m-0">
|
||||
The source code is fully available as
|
||||
<a
|
||||
@ -232,7 +230,7 @@
|
||||
</div>
|
||||
<div *ngIf="!user" class="row">
|
||||
<div class="col mt-3 text-center">
|
||||
<a color="primary" i18n mat-flat-button [routerLink]="['/register']">
|
||||
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||
Get Started
|
||||
</a>
|
||||
</div>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col text-center">
|
||||
<h1 class="font-weight-bold intro my-5" i18n>
|
||||
<h1 class="font-weight-bold intro my-5">
|
||||
Manage your wealth like a boss
|
||||
</h1>
|
||||
<div>
|
||||
@ -29,19 +29,13 @@
|
||||
<a
|
||||
class="d-inline-block"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[routerLink]="['/register']"
|
||||
>
|
||||
Get Started
|
||||
</a>
|
||||
<div class="d-inline-block mx-3 text-muted" i18n>or</div>
|
||||
<a
|
||||
class="d-inline-block"
|
||||
i18n
|
||||
mat-stroked-button
|
||||
[routerLink]="['/demo']"
|
||||
>
|
||||
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</div>
|
||||
@ -107,7 +101,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
<div class="mt-4 text-center">
|
||||
<a [routerLink]="['/about']" i18n mat-stroked-button
|
||||
<a [routerLink]="['/about']" mat-stroked-button
|
||||
>Learn more about Ghostfolio</a
|
||||
>
|
||||
</div>
|
||||
@ -162,16 +156,11 @@
|
||||
Join now or check out the example account
|
||||
</p>
|
||||
<div class="py-2 text-center">
|
||||
<a color="primary" i18n mat-flat-button [routerLink]="['/register']">
|
||||
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||
Get Started
|
||||
</a>
|
||||
<div class="d-inline-block mx-3 text-muted" i18n>or</div>
|
||||
<a
|
||||
class="d-inline-block"
|
||||
i18n
|
||||
mat-stroked-button
|
||||
[routerLink]="['/demo']"
|
||||
>
|
||||
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</div>
|
||||
|
@ -94,8 +94,8 @@
|
||||
<div class="col-md-12 allocations-by-symbol">
|
||||
<mat-card class="mb-3">
|
||||
<mat-card-header class="overflow-hidden w-100">
|
||||
<mat-card-title class="align-items-center d-flex text-truncate" i18n>
|
||||
By Holding</mat-card-title
|
||||
<mat-card-title class="align-items-center d-flex text-truncate">
|
||||
<ng-container i18n>By Holding</ng-container></mat-card-title
|
||||
>
|
||||
<gf-toggle
|
||||
[defaultValue]="period"
|
||||
|
@ -1,10 +1,10 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3 class="align-items-center d-flex justify-content-center mb-3" i18n>
|
||||
<h3 class="align-items-center d-flex justify-content-center mb-3">
|
||||
X-ray
|
||||
</h3>
|
||||
<p class="mb-4" i18n>
|
||||
<p class="mb-4">
|
||||
Ghostfolio X-ray uses static analysis to identify potential issues and
|
||||
risks in your portfolio.
|
||||
<span class="d-none"
|
||||
@ -14,21 +14,21 @@
|
||||
>
|
||||
</p>
|
||||
<div class="mb-4">
|
||||
<h4 class="m-0" i18n>Currency Cluster Risks</h4>
|
||||
<h4 class="m-0">Currency Cluster Risks</h4>
|
||||
<gf-rules
|
||||
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
||||
[rules]="currencyClusterRiskRules"
|
||||
></gf-rules>
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<h4 class="m-0" i18n>Account Cluster Risks</h4>
|
||||
<h4 class="m-0">Account Cluster Risks</h4>
|
||||
<gf-rules
|
||||
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
||||
[rules]="accountClusterRiskRules"
|
||||
></gf-rules>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="m-0" i18n>Fees</h4>
|
||||
<h4 class="m-0">Fees</h4>
|
||||
<gf-rules
|
||||
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
||||
[rules]="feeRules"
|
||||
|
@ -201,12 +201,11 @@
|
||||
<button i18n mat-button type="button" (click)="onCancel()">Cancel</button>
|
||||
<button
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
type="submit"
|
||||
[disabled]="!activityForm.valid"
|
||||
>
|
||||
Save
|
||||
<ng-container i18n>Save</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3 class="d-flex justify-content-center mb-3 text-center" i18n>
|
||||
<h3 class="d-flex justify-content-center mb-3 text-center">
|
||||
Pricing Plans
|
||||
</h3>
|
||||
<div class="mb-4">
|
||||
@ -20,7 +20,7 @@
|
||||
<div class="col-xs-12 col-md-4 mb-3">
|
||||
<mat-card class="d-flex flex-column h-100">
|
||||
<div class="flex-grow-1">
|
||||
<h4 i18n>Open Source</h4>
|
||||
<h4>Open Source</h4>
|
||||
<p>
|
||||
For tech-savvy investors who prefer to run
|
||||
<strong>Ghostfolio</strong> on their own infrastructure.
|
||||
@ -73,7 +73,7 @@
|
||||
[ngClass]="{ 'active': user?.subscription?.type === 'Basic' }"
|
||||
>
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex" i18n>Basic</h4>
|
||||
<h4 class="align-items-center d-flex">Basic</h4>
|
||||
<p>
|
||||
For new investors who are just getting started with trading.
|
||||
</p>
|
||||
@ -124,7 +124,7 @@
|
||||
>
|
||||
<div class="flex-grow-1">
|
||||
<h4 class="align-items-center d-flex">
|
||||
<span i18n>Premium</span>
|
||||
<span>Premium</span>
|
||||
<gf-premium-indicator
|
||||
class="ml-1"
|
||||
[enableLink]="false"
|
||||
@ -186,7 +186,7 @@
|
||||
>{{ baseCurrency }} <strong
|
||||
>{{ price }}</strong
|
||||
></ng-container
|
||||
> <span i18n>per year</span></span
|
||||
> <span>per year</span></span
|
||||
>
|
||||
</p>
|
||||
</mat-card>
|
||||
@ -196,14 +196,14 @@
|
||||
</div>
|
||||
<div *ngIf="user?.subscription?.type === 'Basic'" class="row">
|
||||
<div class="col mt-3 text-center">
|
||||
<a color="primary" i18n mat-flat-button [routerLink]="['/account']">
|
||||
<a color="primary" mat-flat-button [routerLink]="['/account']">
|
||||
Upgrade Plan
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="!user" class="row">
|
||||
<div class="col mt-3 text-center">
|
||||
<a color="primary" i18n mat-flat-button [routerLink]="['/register']">
|
||||
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||
Get Started
|
||||
</a>
|
||||
<p class="text-muted"><small>It's free</small></p>
|
||||
|
@ -129,8 +129,8 @@
|
||||
Ghostfolio empowers you to keep track of your wealth.
|
||||
</p>
|
||||
<div class="py-2 text-center">
|
||||
<a color="primary" href="https://ghostfol.io" i18n mat-flat-button>
|
||||
Get Started
|
||||
<a color="primary" href="https://ghostfol.io" mat-flat-button>
|
||||
<ng-container i18n>Get Started</ng-container>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -20,12 +20,11 @@
|
||||
<button
|
||||
class="d-inline-block"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
[disabled]="!demoAuthToken || info?.isReadOnlyMode"
|
||||
(click)="createAccount()"
|
||||
>
|
||||
Create Account
|
||||
<ng-container i18n>Create Account</ng-container>
|
||||
</button>
|
||||
<ng-container *ngIf="hasPermissionForSocialLogin">
|
||||
<div class="my-3 text-muted" i18n>or</div>
|
||||
|
@ -14,21 +14,20 @@
|
||||
*ngIf="hasError"
|
||||
class="align-items-center col d-flex flex-column justify-content-center"
|
||||
>
|
||||
<h1 class="d-flex h5 justify-content-center mb-0 text-center" i18n>
|
||||
Oops, authentication has failed.
|
||||
<h1 class="d-flex h5 justify-content-center mb-0 text-center">
|
||||
<ng-container i18n>Oops, authentication has failed.</ng-container>
|
||||
</h1>
|
||||
<button
|
||||
class="mb-3 mt-4"
|
||||
color="primary"
|
||||
i18n
|
||||
mat-flat-button
|
||||
(click)="signIn()"
|
||||
>
|
||||
Try again
|
||||
<ng-container i18n>Try again</ng-container>
|
||||
</button>
|
||||
<div class="text-muted" i18n>or</div>
|
||||
<button class="mt-1" i18n mat-flat-button (click)="deregisterDevice()">
|
||||
Go back to Home Page
|
||||
<div class="text-muted"><ng-container i18n>or</ng-container></div>
|
||||
<button class="mt-1" mat-flat-button (click)="deregisterDevice()">
|
||||
<ng-container i18n>Go back to Home Page</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -36,8 +36,8 @@
|
||||
></td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="date">
|
||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
||||
Date
|
||||
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||
<ng-container i18n>Date</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||
<div class="d-flex">
|
||||
@ -48,8 +48,8 @@
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="type">
|
||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
||||
Type
|
||||
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||
<ng-container i18n>Type</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" mat-cell class="px-1">
|
||||
<div
|
||||
@ -80,8 +80,8 @@
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="symbol">
|
||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
||||
Symbol
|
||||
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||
<ng-container i18n>Symbol</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||
<div class="d-flex align-items-center">
|
||||
@ -103,11 +103,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Currency
|
||||
<ng-container i18n>Currency</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -125,11 +124,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Quantity
|
||||
<ng-container i18n>Quantity</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -155,11 +153,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Unit Price
|
||||
<ng-container i18n>Unit Price</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -185,11 +182,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Fee
|
||||
<ng-container i18n>Fee</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -219,11 +215,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Value
|
||||
<ng-container i18n>Value</ng-container>
|
||||
</th>
|
||||
<td
|
||||
*matCellDef="let element"
|
||||
@ -255,11 +250,10 @@
|
||||
<th
|
||||
*matHeaderCellDef
|
||||
class="d-lg-none d-xl-none justify-content-end px-1"
|
||||
i18n
|
||||
mat-header-cell
|
||||
mat-sort-header
|
||||
>
|
||||
Value
|
||||
<ng-container i18n>Value</ng-container>
|
||||
</th>
|
||||
<td *matCellDef="let element" class="d-lg-none d-xl-none px-1" mat-cell>
|
||||
<div class="d-flex justify-content-end">
|
||||
|
Loading…
x
Reference in New Issue
Block a user