Browse Source

Merge branch 'main' into feature/improve-account-selector-of-create-or-update-activity-dialog

pull/3607/head
Thomas Kaul 1 year ago
committed by GitHub
parent
commit
0b740244bf
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      CHANGELOG.md
  2. 8
      apps/api/src/app/portfolio/portfolio.controller.ts
  3. 40
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  4. 84
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
  5. 72
      apps/client/src/locales/messages.es.xlf
  6. 2
      libs/common/src/lib/interfaces/product.ts
  7. 14
      libs/common/src/lib/personal-finance-tools.ts
  8. 24
      libs/ui/src/lib/i18n.ts

5
CHANGELOG.md

@ -15,9 +15,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the handling of the numerical precision in the value component
- Improved the account selector of the create or update activity dialog
- Improved the language localization for Spanish (`es`)
- Upgraded `angular` from version `18.0.4` to `18.1.1`
- Upgraded `Nx` from version `19.4.3` to `19.5.1`
### Fixed
- Fixed an issue in the public page related to a non-existent access
## 2.97.0 - 2024-07-20
### Added

8
apps/api/src/app/portfolio/portfolio.controller.ts

@ -496,9 +496,6 @@ export class PortfolioController {
@Param('accessId') accessId
): Promise<PortfolioPublicDetails> {
const access = await this.accessService.access({ id: accessId });
const user = await this.userService.user({
id: access.userId
});
if (!access) {
throw new HttpException(
@ -508,6 +505,11 @@ export class PortfolioController {
}
let hasDetails = true;
const user = await this.userService.user({
id: access.userId
});
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
hasDetails = user.subscription.type === 'Premium';
}

40
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts

@ -1,6 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Product } from '@ghostfolio/common/interfaces';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { translate } from '@ghostfolio/ui/i18n';
import { CommonModule } from '@angular/common';
import { Component, OnInit } from '@angular/core';
@ -26,6 +27,7 @@ export class GfProductPageComponent implements OnInit {
'/' + $localize`resources`,
'personal-finance-tools'
];
public tags: string[];
public constructor(
private dataService: DataService,
@ -56,7 +58,7 @@ export class GfProductPageComponent implements OnInit {
],
name: 'Ghostfolio',
origin: $localize`Switzerland`,
region: $localize`Global`,
regions: [$localize`Global`],
slogan: 'Open Source Wealth Management',
useAnonymously: true
};
@ -64,5 +66,41 @@ export class GfProductPageComponent implements OnInit {
this.product2 = personalFinanceTools.find(({ key }) => {
return key === this.route.snapshot.data['key'];
});
if (this.product2.origin) {
this.product2.origin = translate(this.product2.origin);
}
if (this.product2.regions) {
this.product2.regions = this.product2.regions.map((region) => {
return translate(region);
});
}
this.tags = [
this.product1.name,
this.product2.name,
$localize`Alternative`,
$localize`App`,
$localize`Budgeting`,
$localize`Community`,
$localize`Family Office`,
`Fintech`,
$localize`Investment`,
$localize`Investor`,
$localize`Open Source`,
`OSS`,
$localize`Personal Finance`,
$localize`Privacy`,
$localize`Portfolio`,
$localize`Software`,
$localize`Tool`,
$localize`User Experience`,
$localize`Wealth`,
$localize`Wealth Management`,
`WealthTech`
].sort((a, b) => {
return a.localeCompare(b, undefined, { sensitivity: 'base' });
});
}
}

84
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html

@ -80,8 +80,24 @@
</tr>
<tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>Region</td>
<td class="mat-mdc-cell px-1 py-2">{{ product1.region }}</td>
<td class="mat-mdc-cell px-1 py-2">{{ product2.region }}</td>
<td class="mat-mdc-cell px-1 py-2">
@for (
region of product1.regions;
track region;
let isLast = $last
) {
{{ region }}{{ isLast ? '' : ', ' }}
}
</td>
<td class="mat-mdc-cell px-1 py-2">
@for (
region of product2.regions;
track region;
let isLast = $last
) {
{{ region }}{{ isLast ? '' : ', ' }}
}
</td>
</tr>
<tr class="mat-mdc-row">
<td class="mat-mdc-cell px-3 py-2 text-right" i18n>
@ -236,69 +252,11 @@
</section>
<section class="mb-4">
<ul class="list-inline">
@for (tag of tags; track tag) {
<li class="list-inline-item">
<span class="badge badge-light">Alternative</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">App</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Budgeting</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Community</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Family Office</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Fintech</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">{{ product1.name }}</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Investment</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Investor</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Open Source</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">OSS</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Personal Finance</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Privacy</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Portfolio</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Software</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Tool</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">User Experience</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">WealthTech</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth Management</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">{{ product2.name }}</span>
<span class="badge badge-light">{{ tag }}</span>
</li>
}
</ul>
</section>
<nav aria-label="breadcrumb">

72
apps/client/src/locales/messages.es.xlf

@ -20,7 +20,7 @@
</trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
<source>The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.</source>
<target state="new">El riesgo de pérdida en trading puede ser importante. No es aconsejable invertir dinero que puedas necesitar a corto plazo.</target>
<target state="translated">El riesgo de pérdida en trading puede ser sustancial. No es aconsejable invertir dinero que puedas necesitar a corto plazo.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
<context context-type="linenumber">199</context>
@ -404,7 +404,7 @@
</trans-unit>
<trans-unit id="db287ecf48f50d8a83c1dbdcee6282723b4cd9ad" datatype="html">
<source>Asset Profiles</source>
<target state="new">Perfil del activo</target>
<target state="translated">Perfiles de activos.</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">67</context>
@ -412,7 +412,7 @@
</trans-unit>
<trans-unit id="8ea23a2cc3e9549fa71e7724870038a17216b210" datatype="html">
<source>Historical Market Data</source>
<target state="new">Datos históricos del mercado</target>
<target state="translated">Datos históricos del mercado</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-jobs/admin-jobs.html</context>
<context context-type="linenumber">37</context>
@ -796,7 +796,7 @@
</trans-unit>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="new">Última petición</target>
<target state="translated">Última petición</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">181</context>
@ -1260,7 +1260,7 @@
</trans-unit>
<trans-unit id="e702514cebbfb335331b6d6156ffeacb8c3b14e4" datatype="html">
<source> Annualized Performance </source>
<target state="new">Rendimiento anualizado</target>
<target state="translated">Rendimiento anualizado</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">309</context>
@ -1764,7 +1764,7 @@
</trans-unit>
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
<source>Sign in with fingerprint</source>
<target state="new"> Accede con huella digital </target>
<target state="translated"> Iniciar sesión con huella digital </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">195</context>
@ -1932,7 +1932,7 @@
</trans-unit>
<trans-unit id="5308814695487483464" datatype="html">
<source>Frequently Asked Questions (FAQ)</source>
<target state="new">Preguntas más frecuentes (FAQ)</target>
<target state="translated">Preguntas más frecuentes (FAQ)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/faq-page-routing.module.ts</context>
<context context-type="linenumber">34</context>
@ -2480,7 +2480,7 @@
</trans-unit>
<trans-unit id="1817902710689724227" datatype="html">
<source>Import Activities</source>
<target state="new">Importar operaciones</target>
<target state="translated">Importar operaciones</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">44</context>
@ -3260,7 +3260,7 @@
</trans-unit>
<trans-unit id="7765499580020598783" datatype="html">
<source>Dividend</source>
<target state="new">Dividend</target>
<target state="translated">Dividendo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">38</context>
@ -3272,7 +3272,7 @@
</trans-unit>
<trans-unit id="6410cffb96159fcff46d91effc26df0e240bc0e3" datatype="html">
<source>Dividend Timeline</source>
<target state="new">Dividend Timeline</target>
<target state="translated">Calendario de dividendos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">356</context>
@ -3288,7 +3288,7 @@
</trans-unit>
<trans-unit id="62f17fd50522539fd4c85854828db9d2e1c5330f" datatype="html">
<source>User Signup</source>
<target state="new">User Signup</target>
<target state="translated">Registro de usuario</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">115</context>
@ -3296,7 +3296,7 @@
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
<source>Validating data...</source>
<target state="new">Validating data...</target>
<target state="translated">Validando datos...</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">233</context>
@ -3304,7 +3304,7 @@
</trans-unit>
<trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">
<source>Import</source>
<target state="new">Import</target>
<target state="translated">Importar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">110</context>
@ -3320,7 +3320,7 @@
</trans-unit>
<trans-unit id="4798457301875181136" datatype="html">
<source>Market Data</source>
<target state="new">Market Data</target>
<target state="translated">Datos del mercado</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/admin/admin-page-routing.module.ts</context>
<context context-type="linenumber">30</context>
@ -3332,7 +3332,7 @@
</trans-unit>
<trans-unit id="4555457172864212828" datatype="html">
<source>Users</source>
<target state="new">Users</target>
<target state="translated">Usuarios</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/admin/admin-page-routing.module.ts</context>
<context context-type="linenumber">40</context>
@ -3344,7 +3344,7 @@
</trans-unit>
<trans-unit id="4739818603756173797" datatype="html">
<source>Summary</source>
<target state="new">Summary</target>
<target state="translated">Resumen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page-routing.module.ts</context>
<context context-type="linenumber">33</context>
@ -3364,7 +3364,7 @@
</trans-unit>
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
<source>Load Dividends</source>
<target state="new">Load Dividends</target>
<target state="translated">Cargar dividendos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
<context context-type="linenumber">68</context>
@ -3372,7 +3372,7 @@
</trans-unit>
<trans-unit id="8036977202721714375" datatype="html">
<source>Yearly</source>
<target state="new">Yearly</target>
<target state="translated">Anual</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">51</context>
@ -3380,7 +3380,7 @@
</trans-unit>
<trans-unit id="72640258012696878" datatype="html">
<source>Import Dividends</source>
<target state="new">Import Dividends</target>
<target state="translated">Importar Dividendos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">86</context>
@ -3388,7 +3388,7 @@
</trans-unit>
<trans-unit id="d82473cef3cd2258eab20223ffcdd5af0c0025cc" datatype="html">
<source>Valid until</source>
<target state="new">Valid until</target>
<target state="translated">Válido hasta</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.html</context>
<context context-type="linenumber">23</context>
@ -3404,7 +3404,7 @@
</trans-unit>
<trans-unit id="5036857680734170026" datatype="html">
<source>Grant</source>
<target state="new">Grant</target>
<target state="translated">Conceder</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
@ -3412,7 +3412,7 @@
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
<source>Higher Risk</source>
<target state="new">Higher Risk</target>
<target state="translated">Riesgo mayor</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
@ -3420,7 +3420,7 @@
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
<source>Lower Risk</source>
<target state="new">Lower Risk</target>
<target state="translated">Menor riesgo</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
@ -3428,7 +3428,7 @@
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
<source>Retirement Provision</source>
<target state="new">Retirement Provision</target>
<target state="translated">Provisión de jubilación</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
@ -3436,7 +3436,7 @@
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
<source>Satellite</source>
<target state="new">Satellite</target>
<target state="translated">Satélite</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
@ -3444,7 +3444,7 @@
</trans-unit>
<trans-unit id="9f81affcfbf06f94f1dd5219e3388c1b7e196a0b" datatype="html">
<source> Protection for sensitive information like absolute performances and quantity values </source>
<target state="new"> Protection for sensitive information like absolute performances and quantity values </target>
<target state="translated"> Protección de información confidencial como rendimientos absolutos y valores cuantitativos </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">8</context>
@ -3452,7 +3452,7 @@
</trans-unit>
<trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html">
<source> Distraction-free experience for turbulent times </source>
<target state="new"> Distraction-free experience for turbulent times </target>
<target state="translated"> Experiencia sin distracciones para tiempos turbulentos </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">178</context>
@ -3460,7 +3460,7 @@
</trans-unit>
<trans-unit id="7f44fdbb881db76676fff811a21dc3eadcf11a33" datatype="html">
<source> Sneak peek at upcoming functionality </source>
<target state="new"> Sneak peek at upcoming functionality </target>
<target state="translated"> Un adelanto de las próximas funciones </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">212</context>
@ -3468,7 +3468,7 @@
</trans-unit>
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
<source> Are you an ambitious investor who needs the full picture? </source>
<target state="new"> Are you an ambitious investor who needs the full picture? </target>
<target state="translated"> ¿Es usted un inversor ambicioso que necesita una visión completa? </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">12</context>
@ -3476,7 +3476,7 @@
</trans-unit>
<trans-unit id="cb10143b41a58e68b0e5e8de3ab8aeb570fdaf88" datatype="html">
<source>Portfolio Summary</source>
<target state="new">Portfolio Summary</target>
<target state="translated">Resumen de la cartera</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">22</context>
@ -3492,7 +3492,7 @@
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
<source>Performance Benchmarks</source>
<target state="new">Performance Benchmarks</target>
<target state="translated">Puntos de referencia de rendimiento</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">30</context>
@ -3524,7 +3524,7 @@
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
<source>and more Features...</source>
<target state="new">and more Features...</target>
<target state="translated">y más características...</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">42</context>
@ -3540,7 +3540,7 @@
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
<source>Skip</source>
<target state="new">Skip</target>
<target state="translated">Saltar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">52</context>
@ -3568,7 +3568,7 @@
</trans-unit>
<trans-unit id="fd30b4e3189726798f09fa0ce875486cf50dda2d" datatype="html">
<source> For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. </source>
<target state="new"> For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. </target>
<target state="translated"> Para inversores expertos en tecnología que prefieren ejecutar Ghostfolio en su propia infraestructura. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">38</context>
@ -3576,7 +3576,7 @@
</trans-unit>
<trans-unit id="435445e728dcf7fdf68fbae0e55e83f61591ac87" datatype="html">
<source>Unlimited Transactions</source>
<target state="new">Unlimited Transactions</target>
<target state="translated">Transacciones ilimitadas</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">45</context>
@ -3592,7 +3592,7 @@
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
<source>Unlimited Accounts</source>
<target state="new">Unlimited Accounts</target>
<target state="translated">Cuentas ilimitadas</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">49</context>

2
libs/common/src/lib/interfaces/product.ts

@ -10,7 +10,7 @@ export interface Product {
note?: string;
origin?: string;
pricingPerYear?: string;
region?: string;
regions?: string[];
slogan?: string;
useAnonymously?: boolean;
}

14
libs/common/src/lib/personal-finance-tools.ts

@ -277,7 +277,7 @@ export const personalFinanceTools: Product[] = [
name: 'markets.sh',
origin: `Germany`,
pricingPerYear: '€168',
region: `Global`,
regions: [`Global`],
slogan: 'Track your investments'
},
{
@ -289,7 +289,7 @@ export const personalFinanceTools: Product[] = [
note: 'Maybe Finance has discontinued in 2023',
origin: `United States`,
pricingPerYear: '$145',
region: `United States`,
regions: [`United States`],
slogan: 'Your financial future, in your control'
},
{
@ -300,7 +300,7 @@ export const personalFinanceTools: Product[] = [
name: 'Merlin',
origin: `United States`,
pricingPerYear: '$204',
region: 'Canada, United States',
regions: ['Canada', 'United States'],
slogan: 'The smartest way to track your crypto'
},
{
@ -340,7 +340,7 @@ export const personalFinanceTools: Product[] = [
note: 'Originally named as Tresor One',
origin: `Germany`,
pricingPerYear: '€88',
region: 'Austria, Germany, Switzerland',
regions: ['Austria', 'Germany', 'Switzerland'],
slogan: 'Dein Vermögen immer im Blick'
},
{
@ -360,7 +360,7 @@ export const personalFinanceTools: Product[] = [
name: 'PocketSmith',
origin: `New Zealand`,
pricingPerYear: '$120',
region: `Global`,
regions: [`Global`],
slogan: 'Know where your money is going'
},
{
@ -444,7 +444,7 @@ export const personalFinanceTools: Product[] = [
name: 'Sharesight',
origin: `New Zealand`,
pricingPerYear: '$135',
region: `Global`,
regions: [`Global`],
slogan: 'Stock Portfolio Tracker'
},
{
@ -594,7 +594,7 @@ export const personalFinanceTools: Product[] = [
languages: ['Deutsch', 'English', 'Español', 'Français', 'Italiano'],
name: 'yeekatee',
origin: `Switzerland`,
region: `Global`,
regions: [`Global`],
slogan: 'Connect. Share. Invest.'
},
{

24
libs/ui/src/lib/i18n.ts

@ -11,10 +11,10 @@ const locales = {
DATA_IMPORT_AND_EXPORT_TOOLTIP_OSS: $localize`Switch to Ghostfolio Premium easily`,
DATA_IMPORT_AND_EXPORT_TOOLTIP_PREMIUM: $localize`Switch to Ghostfolio Open Source or Ghostfolio Basic easily`,
EMERGENCY_FUND: $localize`Emergency Fund`,
Global: $localize`Global`,
GRANT: $localize`Grant`,
HIGHER_RISK: $localize`Higher Risk`,
IMPORT_ACTIVITY_ERROR_IS_DUPLICATE: $localize`This activity already exists.`,
Japan: $localize`Japan`,
LOWER_RISK: $localize`Lower Risk`,
MONTH: $localize`Month`,
MONTHS: $localize`Months`,
@ -65,6 +65,28 @@ const locales = {
Oceania: $localize`Oceania`,
'South America': $localize`South America`,
// Countries
Australia: $localize`Australia`,
Austria: $localize`Austria`,
Belgium: $localize`Belgium`,
Bulgaria: $localize`Bulgaria`,
Canada: $localize`Canada`,
'Czech Republic': $localize`Czech Republic`,
Finland: $localize`Finland`,
France: $localize`France`,
Germany: $localize`Germany`,
India: $localize`India`,
Italy: $localize`Italy`,
Japan: $localize`Japan`,
Netherlands: $localize`Netherlands`,
'New Zealand': $localize`New Zealand`,
Poland: $localize`Poland`,
Romania: $localize`Romania`,
'South Africa': $localize`South Africa`,
Switzerland: $localize`Switzerland`,
Thailand: $localize`Thailand`,
'United States': $localize`United States`,
// Fear and Greed Index
EXTREME_FEAR: $localize`Extreme Fear`,
EXTREME_GREED: $localize`Extreme Greed`,

Loading…
Cancel
Save