Eliminate duplicate locales (#1176)

pull/1179/head
Thomas Kaul 2 years ago committed by GitHub
parent 2e6a7d5a91
commit 11136ae4f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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”). Its
@ -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 }}&nbsp;<strong
>{{ price }}</strong
></ng-container
>&nbsp;<span i18n>per year</span></span
>&nbsp;<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…
Cancel
Save