Feature/improve localization of personal finance tools (#2274)

* Improve localization

* Update changelog
This commit is contained in:
Thomas Kaul 2023-09-02 08:58:10 +02:00 committed by GitHub
parent dceaa55a6c
commit 93e1ee3ba7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 7270 additions and 100 deletions

View File

@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Shortened the page titles - Shortened the page titles
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `4.16.2` to `5.2.0` - Upgraded `prisma` from version `4.16.2` to `5.2.0`
- Upgraded `yahoo-finance2` from version `2.4.3` to `2.4.4` - Upgraded `yahoo-finance2` from version `2.4.3` to `2.4.4`

View File

@ -50,6 +50,110 @@
<loc>https://ghostfol.io/de/ressourcen</loc> <loc>https://ghostfol.io/de/ressourcen</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url> </url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-altoo</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-copilot-money</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-delta</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-divvydiary</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-exirio</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-folishare</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-getquin</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-gospatz</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-justetf</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-kubera</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-markets.sh</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-maybe-finance</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-monse</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-parqet</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-plannix</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-portfolio-dividend-tracker</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-portseido</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-projectionlab</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-seeking-alpha</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-sharesight</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-simple-portfolio</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-snowball-analytics</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-sumio</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-utluna</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-yeekatee</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url> <url>
<loc>https://ghostfol.io/de/ueber-uns</loc> <loc>https://ghostfol.io/de/ueber-uns</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>

View File

@ -19,7 +19,7 @@ const routes: Routes = [
.map(({ component, key, name }) => { .map(({ component, key, name }) => {
return { return {
canActivate: [AuthGuard], canActivate: [AuthGuard],
path: `open-source-alternative-to-${key}`, path: $localize`open-source-alternative-to` + `-${key}`,
loadComponent: () => loadComponent: () =>
import(`./products/${key}-page.component`).then(() => component), import(`./products/${key}-page.component`).then(() => component),
title: $localize`Open Source Alternative to ${name}` title: $localize`Open Source Alternative to ${name}`

View File

@ -10,6 +10,7 @@ import { products } from './products';
templateUrl: './personal-finance-tools-page.html' templateUrl: './personal-finance-tools-page.html'
}) })
export class PersonalFinanceToolsPageComponent implements OnDestroy { export class PersonalFinanceToolsPageComponent implements OnDestroy {
public pathAlternativeTo = $localize`open-source-alternative-to` + '-';
public pathResources = '/' + $localize`resources`; public pathResources = '/' + $localize`resources`;
public products = products.filter(({ key }) => { public products = products.filter(({ key }) => {
return key !== 'ghostfolio'; return key !== 'ghostfolio';

View File

@ -29,7 +29,7 @@
<a <a
class="d-flex overflow-hidden w-100" class="d-flex overflow-hidden w-100"
title="Compare Ghostfolio to {{ product.name }}" title="Compare Ghostfolio to {{ product.name }}"
[routerLink]="[pathResources, 'personal-finance-tools', 'open-source-alternative-to-' + product.key]" [routerLink]="[pathResources, 'personal-finance-tools', pathAlternativeTo + product.key]"
> >
<div class="flex-grow-1 overflow-hidden"> <div class="flex-grow-1 overflow-hidden">
<div class="h6 m-0 text-truncate" i18n> <div class="h6 m-0 text-truncate" i18n>

View File

@ -10,7 +10,7 @@
</h1> </h1>
</div> </div>
<section class="mb-4"> <section class="mb-4">
<p> <p i18n>
Are you looking for an open source alternative to {{ product2.name Are you looking for an open source alternative to {{ product2.name
}}? <a [routerLink]="routerLinkAbout">Ghostfolio</a> is a powerful }}? <a [routerLink]="routerLinkAbout">Ghostfolio</a> is a powerful
portfolio management tool that provides individuals with a portfolio management tool that provides individuals with a
@ -23,7 +23,7 @@
to help you make informed decisions and take control of your to help you make informed decisions and take control of your
financial future. financial future.
</p> </p>
<p> <p i18n>
Ghostfolio is an open source software (OSS), providing a Ghostfolio is an open source software (OSS), providing a
cost-effective alternative to {{ product2.name }} making it cost-effective alternative to {{ product2.name }} making it
particularly suitable for individuals on a tight budget, such as particularly suitable for individuals on a tight budget, such as
@ -34,7 +34,7 @@
and personal finance enthusiasts, Ghostfolio continuously enhances and personal finance enthusiasts, Ghostfolio continuously enhances
its capabilities, security, and user experience. its capabilities, security, and user experience.
</p> </p>
<p> <p i18n>
Lets dive deeper into the detailed comparison table below to gain a Lets dive deeper into the detailed comparison table below to gain a
thorough understanding of how Ghostfolio positions itself relative thorough understanding of how Ghostfolio positions itself relative
to {{ product2.name }}. We will explore various aspects such as to {{ product2.name }}. We will explore various aspects such as
@ -177,11 +177,11 @@
</tr> </tr>
<tr class="mat-mdc-row"> <tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Pricing</td> <td class="mat-mdc-cell px-3 py-2 text-right" i18n>Pricing</td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2" i18n>
Starting from {{ product1.pricingPerYear }} / year Starting from {{ product1.pricingPerYear }} / year
</td> </td>
<td class="mat-mdc-cell px-1 py-2"> <td class="mat-mdc-cell px-1 py-2">
<ng-container *ngIf="product2.pricingPerYear" <ng-container *ngIf="product2.pricingPerYear" i18n
>Starting from {{ product2.pricingPerYear }} / >Starting from {{ product2.pricingPerYear }} /
year</ng-container year</ng-container
> >
@ -196,7 +196,7 @@
</table> </table>
</section> </section>
<section class="mb-4"> <section class="mb-4">
<p> <p i18n>
Please note that the information provided is based on our Please note that the information provided is based on our
independent research and analysis. This website is not affiliated independent research and analysis. This website is not affiliated
with {{ product2.name }} or any other product mentioned in the with {{ product2.name }} or any other product mentioned in the
@ -208,7 +208,7 @@
</p> </p>
</section> </section>
<section class="call-to-action mb-4 py-3 rounded"> <section class="call-to-action mb-4 py-3 rounded">
<h2 class="h4 mb-0 text-center"> <h2 class="h4 mb-0 text-center" i18n>
Ready to take your <strong>investments</strong> to the Ready to take your <strong>investments</strong> to the
<strong>next level</strong>? <strong>next level</strong>?
</h2> </h2>
@ -217,7 +217,7 @@
Ghostfolio. Ghostfolio.
</p> </p>
<div class="text-center"> <div class="text-center">
<a color="primary" href="https://ghostfol.io" mat-flat-button> <a color="primary" href="https://ghostfol.io" i18n mat-flat-button>
Get Started Get Started
</a> </a>
</div> </div>

View File

@ -35,18 +35,18 @@ export const products: Product[] = [
isOpenSource: true, isOpenSource: true,
key: 'ghostfolio', key: 'ghostfolio',
languages: [ languages: [
'Dutch', 'Deutsch',
'English', 'English',
'French', 'Español',
'German', 'Français',
'Italian', 'Italiano',
'Portuguese', 'Nederlands',
'Spanish' 'Português'
], ],
name: 'Ghostfolio', name: 'Ghostfolio',
origin: 'Switzerland', origin: $localize`Switzerland`,
pricingPerYear: '$19', pricingPerYear: '$19',
region: 'Global', region: $localize`Global`,
slogan: 'Open Source Wealth Management', slogan: 'Open Source Wealth Management',
useAnonymously: true useAnonymously: true
}, },
@ -57,7 +57,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'altoo', key: 'altoo',
name: 'Altoo Wealth Platform', name: 'Altoo Wealth Platform',
origin: 'Switzerland', origin: $localize`Switzerland`,
slogan: 'Simplicity for Complex Wealth' slogan: 'Simplicity for Complex Wealth'
}, },
{ {
@ -68,7 +68,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'copilot-money', key: 'copilot-money',
name: 'Copilot Money', name: 'Copilot Money',
origin: 'United States', origin: $localize`United States`,
pricingPerYear: '$70', pricingPerYear: '$70',
slogan: 'Do money better with Copilot' slogan: 'Do money better with Copilot'
}, },
@ -81,7 +81,7 @@ export const products: Product[] = [
key: 'delta', key: 'delta',
name: 'Delta Investment Tracker', name: 'Delta Investment Tracker',
note: 'Acquired by eToro', note: 'Acquired by eToro',
origin: 'Belgium', origin: $localize`Belgium`,
slogan: 'The app to track all your investments. Make smart moves only.' slogan: 'The app to track all your investments. Make smart moves only.'
}, },
{ {
@ -91,9 +91,9 @@ export const products: Product[] = [
hasSelfHostingAbility: false, hasSelfHostingAbility: false,
isOpenSource: false, isOpenSource: false,
key: 'divvydiary', key: 'divvydiary',
languages: ['English', 'German'], languages: ['Deutsch', 'English'],
name: 'DivvyDiary', name: 'DivvyDiary',
origin: 'Germany', origin: $localize`Germany`,
pricingPerYear: '€65', pricingPerYear: '€65',
slogan: 'Your personal Dividend Calendar' slogan: 'Your personal Dividend Calendar'
}, },
@ -105,7 +105,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'exirio', key: 'exirio',
name: 'Exirio', name: 'Exirio',
origin: 'United States', origin: $localize`United States`,
pricingPerYear: '$100', pricingPerYear: '$100',
slogan: 'All your wealth, in one place.' slogan: 'All your wealth, in one place.'
}, },
@ -115,9 +115,9 @@ export const products: Product[] = [
hasSelfHostingAbility: false, hasSelfHostingAbility: false,
isOpenSource: false, isOpenSource: false,
key: 'folishare', key: 'folishare',
languages: ['English', 'German'], languages: ['Deutsch', 'English'],
name: 'folishare', name: 'folishare',
origin: 'Austria', origin: $localize`Austria`,
pricingPerYear: '$65', pricingPerYear: '$65',
slogan: 'Take control over your investments' slogan: 'Take control over your investments'
}, },
@ -128,9 +128,9 @@ export const products: Product[] = [
hasSelfHostingAbility: false, hasSelfHostingAbility: false,
isOpenSource: false, isOpenSource: false,
key: 'getquin', key: 'getquin',
languages: ['English', 'German'], languages: ['Deutsch', 'English'],
name: 'getquin', name: 'getquin',
origin: 'Germany', origin: $localize`Germany`,
pricingPerYear: '€48', pricingPerYear: '€48',
slogan: 'Portfolio Tracker, Analysis & Community' slogan: 'Portfolio Tracker, Analysis & Community'
}, },
@ -141,7 +141,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'gospatz', key: 'gospatz',
name: 'goSPATZ', name: 'goSPATZ',
origin: 'Germany', origin: $localize`Germany`,
slogan: 'Volle Kontrolle über deine Investitionen' slogan: 'Volle Kontrolle über deine Investitionen'
}, },
{ {
@ -152,7 +152,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'justetf', key: 'justetf',
name: 'justETF', name: 'justETF',
origin: 'Germany', origin: $localize`Germany`,
pricingPerYear: '€119', pricingPerYear: '€119',
slogan: 'ETF portfolios made simple' slogan: 'ETF portfolios made simple'
}, },
@ -164,7 +164,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'kubera', key: 'kubera',
name: 'Kubera®', name: 'Kubera®',
origin: 'United States', origin: $localize`United States`,
pricingPerYear: '$150', pricingPerYear: '$150',
slogan: 'The Time Machine for your Net Worth' slogan: 'The Time Machine for your Net Worth'
}, },
@ -177,9 +177,9 @@ export const products: Product[] = [
key: 'markets.sh', key: 'markets.sh',
languages: ['English'], languages: ['English'],
name: 'markets.sh', name: 'markets.sh',
origin: 'Germany', origin: $localize`Germany`,
pricingPerYear: '€168', pricingPerYear: '€168',
region: 'Global', region: $localize`Global`,
slogan: 'Track your investments' slogan: 'Track your investments'
}, },
{ {
@ -191,9 +191,9 @@ export const products: Product[] = [
languages: ['English'], languages: ['English'],
name: 'Maybe Finance', name: 'Maybe Finance',
note: 'Sunset in 2023', note: 'Sunset in 2023',
origin: 'United States', origin: $localize`United States`,
pricingPerYear: '$145', pricingPerYear: '$145',
region: 'United States', region: $localize`United States`,
slogan: 'Your financial future, in your control' slogan: 'Your financial future, in your control'
}, },
{ {
@ -215,7 +215,7 @@ export const products: Product[] = [
key: 'parqet', key: 'parqet',
name: 'Parqet', name: 'Parqet',
note: 'Originally named as Tresor One', note: 'Originally named as Tresor One',
origin: 'Germany', origin: $localize`Germany`,
pricingPerYear: '€88', pricingPerYear: '€88',
region: 'Austria, Germany, Switzerland', region: 'Austria, Germany, Switzerland',
slogan: 'Dein Vermögen immer im Blick' slogan: 'Dein Vermögen immer im Blick'
@ -227,7 +227,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'plannix', key: 'plannix',
name: 'Plannix', name: 'Plannix',
origin: 'Italy', origin: $localize`Italy`,
slogan: 'Your Personal Finance Hub' slogan: 'Your Personal Finance Hub'
}, },
{ {
@ -236,9 +236,9 @@ export const products: Product[] = [
hasSelfHostingAbility: false, hasSelfHostingAbility: false,
isOpenSource: false, isOpenSource: false,
key: 'portfolio-dividend-tracker', key: 'portfolio-dividend-tracker',
languages: ['English', 'Dutch'], languages: ['English', 'Nederlands'],
name: 'Portfolio Dividend Tracker', name: 'Portfolio Dividend Tracker',
origin: 'Netherlands', origin: $localize`Netherlands`,
pricingPerYear: '€60', pricingPerYear: '€60',
slogan: 'Manage all your portfolios' slogan: 'Manage all your portfolios'
}, },
@ -249,9 +249,9 @@ export const products: Product[] = [
hasSelfHostingAbility: false, hasSelfHostingAbility: false,
isOpenSource: false, isOpenSource: false,
key: 'portseido', key: 'portseido',
languages: ['Dutch', 'English', 'French', 'German'], languages: ['Deutsch', 'English', 'Français', 'Nederlands'],
name: 'Portseido', name: 'Portseido',
origin: 'Thailand', origin: $localize`Thailand`,
pricingPerYear: '$96', pricingPerYear: '$96',
slogan: 'Portfolio Performance and Dividend Tracker' slogan: 'Portfolio Performance and Dividend Tracker'
}, },
@ -263,7 +263,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'projectionlab', key: 'projectionlab',
name: 'ProjectionLab', name: 'ProjectionLab',
origin: 'United States', origin: $localize`United States`,
pricingPerYear: '$108', pricingPerYear: '$108',
slogan: 'Build Financial Plans You Love.' slogan: 'Build Financial Plans You Love.'
}, },
@ -275,7 +275,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'seeking-alpha', key: 'seeking-alpha',
name: 'Seeking Alpha', name: 'Seeking Alpha',
origin: 'United States', origin: $localize`United States`,
pricingPerYear: '$239', pricingPerYear: '$239',
slogan: 'Stock Market Analysis & Tools for Investors' slogan: 'Stock Market Analysis & Tools for Investors'
}, },
@ -287,9 +287,9 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'sharesight', key: 'sharesight',
name: 'Sharesight', name: 'Sharesight',
origin: 'New Zealand', origin: $localize`New Zealand`,
pricingPerYear: '$135', pricingPerYear: '$135',
region: 'Global', region: $localize`Global`,
slogan: 'Stock Portfolio Tracker' slogan: 'Stock Portfolio Tracker'
}, },
{ {
@ -299,7 +299,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'simple-portfolio', key: 'simple-portfolio',
name: 'Simple Portfolio', name: 'Simple Portfolio',
origin: 'Czech Republic', origin: $localize`Czech Republic`,
pricingPerYear: '€80', pricingPerYear: '€80',
slogan: 'Stock Portfolio Tracker' slogan: 'Stock Portfolio Tracker'
}, },
@ -322,7 +322,7 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'sumio', key: 'sumio',
name: 'Sumio', name: 'Sumio',
origin: 'Czech Republic', origin: $localize`Czech Republic`,
pricingPerYear: '$20', pricingPerYear: '$20',
slogan: 'Sum up and build your wealth.' slogan: 'Sum up and build your wealth.'
}, },
@ -332,9 +332,9 @@ export const products: Product[] = [
hasSelfHostingAbility: false, hasSelfHostingAbility: false,
isOpenSource: false, isOpenSource: false,
key: 'utluna', key: 'utluna',
languages: ['English', 'French', 'German'], languages: ['Deutsch', 'English', 'Français'],
name: 'Utluna', name: 'Utluna',
origin: 'Switzerland', origin: $localize`Switzerland`,
pricingPerYear: '$300', pricingPerYear: '$300',
slogan: 'Your Portfolio. Revealed.', slogan: 'Your Portfolio. Revealed.',
useAnonymously: true useAnonymously: true
@ -346,8 +346,8 @@ export const products: Product[] = [
isOpenSource: false, isOpenSource: false,
key: 'yeekatee', key: 'yeekatee',
name: 'yeekatee', name: 'yeekatee',
origin: 'Switzerland', origin: $localize`Switzerland`,
region: 'Switzerland', region: $localize`Switzerland`,
slogan: 'Connect. Share. Invest.' slogan: 'Connect. Share. Invest.'
} }
]; ];

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff