Browse Source

Refactoring

pull/3478/head
Thomas Kaul 1 year ago
parent
commit
fd028ea68e
  1. 25
      apps/api/src/app/sitemap/sitemap.controller.ts
  2. 5
      apps/api/src/app/sitemap/sitemap.module.ts
  3. 12
      apps/api/src/assets/sitemap.xml
  4. 4
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts
  5. 4
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
  6. 16
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html
  7. 4
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  8. 2
      apps/client/src/locales/messages.es.xlf
  9. 98
      apps/client/src/locales/messages.fr.xlf
  10. 8
      apps/client/src/locales/messages.pt.xlf
  11. 2
      libs/common/src/lib/personal-finance-tools.ts

25
apps/api/src/app/sitemap/sitemap.controller.ts

@ -1,9 +1,10 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { import {
DATE_FORMAT, DATE_FORMAT,
getYesterday, getYesterday,
interpolate interpolate
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
import { products } from '@ghostfolio/common/personal-finance-tools'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { Controller, Get, Res, VERSION_NEUTRAL, Version } from '@nestjs/common'; import { Controller, Get, Res, VERSION_NEUTRAL, Version } from '@nestjs/common';
import { format } from 'date-fns'; import { format } from 'date-fns';
@ -15,7 +16,9 @@ import * as path from 'path';
export class SitemapController { export class SitemapController {
public sitemapXml = ''; public sitemapXml = '';
public constructor() { public constructor(
private readonly configurationService: ConfigurationService
) {
try { try {
this.sitemapXml = fs.readFileSync( this.sitemapXml = fs.readFileSync(
path.join(__dirname, 'assets', 'sitemap.xml'), path.join(__dirname, 'assets', 'sitemap.xml'),
@ -33,7 +36,10 @@ export class SitemapController {
response.send( response.send(
interpolate(this.sitemapXml, { interpolate(this.sitemapXml, {
currentDate, currentDate,
personalFinanceTools: products personalFinanceTools: this.configurationService.get(
'ENABLE_FEATURE_SUBSCRIPTION'
)
? personalFinanceTools
.map(({ alias, key }) => { .map(({ alias, key }) => {
return [ return [
'<url>', '<url>',
@ -45,16 +51,29 @@ export class SitemapController {
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`, ` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>', '</url>',
'<url>', '<url>',
` <loc>https://ghostfol.io/es/recursos/personal-finance-tools/alternativa-de-software-libre-a-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/fr/ressources/personal-finance-tools/alternative-open-source-a-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}</loc>`, ` <loc>https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`, ` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>', '</url>',
'<url>', '<url>',
` <loc>https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}</loc>`, ` <loc>https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`, ` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/pt/recursos/personal-finance-tools/alternativa-de-software-livre-ao-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>' '</url>'
].join('\n'); ].join('\n');
}) })
.join('\n') .join('\n')
: ''
}) })
); );
} }

5
apps/api/src/app/sitemap/sitemap.module.ts

@ -1,8 +1,11 @@
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { SitemapController } from './sitemap.controller'; import { SitemapController } from './sitemap.controller';
@Module({ @Module({
controllers: [SitemapController] controllers: [SitemapController],
imports: [ConfigurationModule]
}) })
export class SitemapModule {} export class SitemapModule {}

12
apps/api/src/assets/sitemap.xml

@ -238,6 +238,10 @@
<loc>https://ghostfol.io/es/recursos</loc> <loc>https://ghostfol.io/es/recursos</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url> </url>
<url>
<loc>https://ghostfol.io/es/recursos/personal-finance-tools</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url> <url>
<loc>https://ghostfol.io/es/registro</loc> <loc>https://ghostfol.io/es/registro</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>
@ -316,6 +320,10 @@
<loc>https://ghostfol.io/fr/ressources</loc> <loc>https://ghostfol.io/fr/ressources</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url> </url>
<url>
<loc>https://ghostfol.io/fr/ressources/personal-finance-tools</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url> <url>
<loc>https://ghostfol.io/it</loc> <loc>https://ghostfol.io/it</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>
@ -470,6 +478,10 @@
<loc>https://ghostfol.io/pt/recursos</loc> <loc>https://ghostfol.io/pt/recursos</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url> </url>
<url>
<loc>https://ghostfol.io/pt/recursos/personal-finance-tools</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod>
</url>
<url> <url>
<loc>https://ghostfol.io/pt/registo</loc> <loc>https://ghostfol.io/pt/registo</loc>
<lastmod>${currentDate}T00:00:00+00:00</lastmod> <lastmod>${currentDate}T00:00:00+00:00</lastmod>

4
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts

@ -1,5 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { products } from '@ghostfolio/common/personal-finance-tools'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
@ -13,7 +13,7 @@ const routes: Routes = [
path: '', path: '',
title: $localize`Personal Finance Tools` title: $localize`Personal Finance Tools`
}, },
...products.map(({ alias, key, name }) => { ...personalFinanceTools.map(({ alias, key, name }) => {
return { return {
canActivate: [AuthGuard], canActivate: [AuthGuard],
data: { key }, data: { key },

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

@ -1,4 +1,4 @@
import { products } from '@ghostfolio/common/personal-finance-tools'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { Component, OnDestroy } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -12,7 +12,7 @@ import { Subject } from 'rxjs';
export class PersonalFinanceToolsPageComponent implements OnDestroy { export class PersonalFinanceToolsPageComponent implements OnDestroy {
public pathAlternativeTo = $localize`open-source-alternative-to` + '-'; public pathAlternativeTo = $localize`open-source-alternative-to` + '-';
public pathResources = '/' + $localize`resources`; public pathResources = '/' + $localize`resources`;
public products = products.sort((a, b) => { public personalFinanceTools = personalFinanceTools.sort((a, b) => {
return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' });
}); });
public routerLinkAbout = ['/' + $localize`about`]; public routerLinkAbout = ['/' + $localize`about`];

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

@ -18,25 +18,29 @@
with Ghostfolio. with Ghostfolio.
</p> </p>
</div> </div>
@for (product of products; track product) { @for (
personalFinanceTool of personalFinanceTools;
track personalFinanceTool
) {
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
<mat-card-content> <mat-card-content>
<div class="container p-0"> <div class="container p-0">
<div class="flex-nowrap no-gutters row"> <div class="flex-nowrap no-gutters row">
<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.slogan personalFinanceTool.name
}}" }} - {{ personalFinanceTool.slogan }}"
[routerLink]="[ [routerLink]="[
pathResources, pathResources,
'personal-finance-tools', 'personal-finance-tools',
pathAlternativeTo + (product.alias ?? product.key) pathAlternativeTo +
(personalFinanceTool.alias ?? personalFinanceTool.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>
Open Source Alternative to {{ product.name }} Open Source Alternative to {{ personalFinanceTool.name }}
</div> </div>
</div> </div>
<div class="align-items-center d-flex"> <div class="align-items-center d-flex">

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

@ -1,6 +1,6 @@
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { Product } from '@ghostfolio/common/interfaces'; import { Product } from '@ghostfolio/common/interfaces';
import { products } from '@ghostfolio/common/personal-finance-tools'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
@ -61,7 +61,7 @@ export class GfProductPageComponent implements OnInit {
useAnonymously: true useAnonymously: true
}; };
this.product2 = products.find(({ key }) => { this.product2 = personalFinanceTools.find(({ key }) => {
return key === this.route.snapshot.data['key']; return key === this.route.snapshot.data['key'];
}); });
} }

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

@ -13144,7 +13144,7 @@
</trans-unit> </trans-unit>
<trans-unit id="5827613432388799534" datatype="html"> <trans-unit id="5827613432388799534" datatype="html">
<source>open-source-alternative-to</source> <source>open-source-alternative-to</source>
<target state="new">open-source-alternative-to</target> <target state="translated">alternativa-de-software-libre-a</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>

98
apps/client/src/locales/messages.fr.xlf

@ -3,7 +3,7 @@
<body> <body>
<trans-unit id="2ca05295d27e46c262b233252d1b19c27d95d07f" datatype="html"> <trans-unit id="2ca05295d27e46c262b233252d1b19c27d95d07f" 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> <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="translated">Le risque de perte en investissant peut être important. Il est déconseillé d&apos;investir de l&apos;argent dont vous pourriez avoir besoin à court terme.</target> <target state="translated">Le risque de perte en investissant peut être important. Il est déconseillé d’investir de l’argent dont vous pourriez avoir besoin à court terme.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/app.component.html</context> <context context-type="sourcefile">apps/client/src/app/app.component.html</context>
<context context-type="linenumber">182</context> <context context-type="linenumber">182</context>
@ -459,7 +459,7 @@
</trans-unit> </trans-unit>
<trans-unit id="db287ecf48f50d8a83c1dbdcee6282723b4cd9ad" datatype="html"> <trans-unit id="db287ecf48f50d8a83c1dbdcee6282723b4cd9ad" datatype="html">
<source>Asset Profiles</source> <source>Asset Profiles</source>
<target state="new">Profil d&apos;Actifs</target> <target state="new">Profil dActifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">67</context> <context context-type="linenumber">67</context>
@ -627,7 +627,7 @@
</trans-unit> </trans-unit>
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html"> <trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
<source>Asset Class</source> <source>Asset Class</source>
<target state="translated">Classe d&apos;Actifs</target> <target state="translated">Classe dActifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">60</context> <context context-type="linenumber">60</context>
@ -651,7 +651,7 @@
</trans-unit> </trans-unit>
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html"> <trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
<source>Asset Sub Class</source> <source>Asset Sub Class</source>
<target state="translated">Sous-classe d&apos;Actifs</target> <target state="translated">Sous-classe dActifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">69</context> <context context-type="linenumber">69</context>
@ -695,7 +695,7 @@
</trans-unit> </trans-unit>
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html"> <trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
<source>Activities Count</source> <source>Activities Count</source>
<target state="translated">Nombre d&apos;Activités</target> <target state="translated">Nombre dActivités</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">87</context>
@ -895,7 +895,7 @@
</trans-unit> </trans-unit>
<trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html"> <trans-unit id="ec03f5c28b327fc7ecfc4b20a0a7cf14a75843ff" datatype="html">
<source>User Count</source> <source>User Count</source>
<target state="translated">Nombre d&apos;Utilisateurs</target> <target state="translated">Nombre dUtilisateurs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
@ -903,7 +903,7 @@
</trans-unit> </trans-unit>
<trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html"> <trans-unit id="ced0954194f098201837bb03b32441e4991b5193" datatype="html">
<source>Activity Count</source> <source>Activity Count</source>
<target state="translated">Nombre d&apos;Activités</target> <target state="translated">Nombre dActivités</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>
@ -1623,7 +1623,7 @@
</trans-unit> </trans-unit>
<trans-unit id="5499742151525073097" datatype="html"> <trans-unit id="5499742151525073097" datatype="html">
<source>Upgrade Plan</source> <source>Upgrade Plan</source>
<target state="translated">Mettre à niveau l&apos;Abonnement</target> <target state="translated">Mettre à niveau lAbonnement</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-summary/home-summary.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/home-summary/home-summary.component.ts</context>
<context context-type="linenumber">115</context> <context context-type="linenumber">115</context>
@ -1651,7 +1651,7 @@
</trans-unit> </trans-unit>
<trans-unit id="8192718423057883427" datatype="html"> <trans-unit id="8192718423057883427" datatype="html">
<source>Savings Rate</source> <source>Savings Rate</source>
<target state="translated">Taux d&apos;Épargne</target> <target state="translated">Taux dÉpargne</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/investment-chart/investment-chart.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/investment-chart/investment-chart.component.ts</context>
<context context-type="linenumber">214</context> <context context-type="linenumber">214</context>
@ -1807,7 +1807,7 @@
</trans-unit> </trans-unit>
<trans-unit id="2201b2004bc4997a66f6f8ea2511a4e1311f3de1" datatype="html"> <trans-unit id="2201b2004bc4997a66f6f8ea2511a4e1311f3de1" datatype="html">
<source>Emergency Fund</source> <source>Emergency Fund</source>
<target state="translated">Fonds d&apos;Urgence</target> <target state="translated">Fonds dUrgence</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">190</context> <context context-type="linenumber">190</context>
@ -1823,7 +1823,7 @@
</trans-unit> </trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html"> <trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
<source>Buying Power</source> <source>Buying Power</source>
<target state="translated">Pouvoir d&apos;Achat</target> <target state="translated">Pouvoir dAchat</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">237</context> <context context-type="linenumber">237</context>
@ -1831,7 +1831,7 @@
</trans-unit> </trans-unit>
<trans-unit id="98fc3013bfcbf452b9f37bbfcdb77b9b882866e3" datatype="html"> <trans-unit id="98fc3013bfcbf452b9f37bbfcdb77b9b882866e3" datatype="html">
<source>Excluded from Analysis</source> <source>Excluded from Analysis</source>
<target state="translated">Exclus de l&apos;Analyse</target> <target state="translated">Exclus de lAnalyse</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">249</context> <context context-type="linenumber">249</context>
@ -1879,7 +1879,7 @@
</trans-unit> </trans-unit>
<trans-unit id="6785405835169448749" datatype="html"> <trans-unit id="6785405835169448749" datatype="html">
<source>Please enter the amount of your emergency fund:</source> <source>Please enter the amount of your emergency fund:</source>
<target state="translated">Veuillez entrer le montant de votre fonds d&apos;urgence :</target> <target state="translated">Veuillez entrer le montant de votre fonds durgence :</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts</context>
<context context-type="linenumber">57</context> <context context-type="linenumber">57</context>
@ -1947,7 +1947,7 @@
</trans-unit> </trans-unit>
<trans-unit id="6048892649018070225" datatype="html"> <trans-unit id="6048892649018070225" datatype="html">
<source>Today</source> <source>Today</source>
<target state="translated">Aujourd&apos;hui</target> <target state="translated">Aujourdhui</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/toggle/toggle.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/toggle/toggle.component.ts</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">22</context>
@ -2031,7 +2031,7 @@
</trans-unit> </trans-unit>
<trans-unit id="7224997887539831269" datatype="html"> <trans-unit id="7224997887539831269" datatype="html">
<source>Oops! Something went wrong.</source> <source>Oops! Something went wrong.</source>
<target state="translated">Oups! Quelque chose s&apos;est mal passé.</target> <target state="translated">Oups! Quelque chose sest mal passé.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/core/http-response.interceptor.ts</context> <context context-type="sourcefile">apps/client/src/app/core/http-response.interceptor.ts</context>
<context context-type="linenumber">89</context> <context context-type="linenumber">89</context>
@ -2043,7 +2043,7 @@
</trans-unit> </trans-unit>
<trans-unit id="1579692722565712588" datatype="html"> <trans-unit id="1579692722565712588" datatype="html">
<source>Okay</source> <source>Okay</source>
<target state="translated">D&apos;accord</target> <target state="translated">Daccord</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/core/http-response.interceptor.ts</context> <context context-type="sourcefile">apps/client/src/app/core/http-response.interceptor.ts</context>
<context context-type="linenumber">92</context> <context context-type="linenumber">92</context>
@ -2143,7 +2143,7 @@
</trans-unit> </trans-unit>
<trans-unit id="4420880039966769543" datatype="html"> <trans-unit id="4420880039966769543" datatype="html">
<source>Could not redeem coupon code</source> <source>Could not redeem coupon code</source>
<target state="translated">Le code promotionnel n&apos;a pas pu être appliqué</target> <target state="translated">Le code promotionnel na pas pu être appliqué</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context>
<context context-type="linenumber">121</context> <context context-type="linenumber">121</context>
@ -2299,7 +2299,7 @@
</trans-unit> </trans-unit>
<trans-unit id="4402006eb2c97591dd8c87a5bd8f721fe9e4dc00" datatype="html"> <trans-unit id="4402006eb2c97591dd8c87a5bd8f721fe9e4dc00" datatype="html">
<source>Date and number format</source> <source>Date and number format</source>
<target state="translated">Format de date et d&apos;heure</target> <target state="translated">Format de date et dheure</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">123</context> <context context-type="linenumber">123</context>
@ -2367,7 +2367,7 @@
</trans-unit> </trans-unit>
<trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html"> <trans-unit id="83c4d4d764d2e2725ab8e919ec16ac400e1f290a" datatype="html">
<source>User ID</source> <source>User ID</source>
<target state="translated">ID d&apos;utilisateur</target> <target state="translated">ID dutilisateur</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
<context context-type="linenumber">45</context> <context context-type="linenumber">45</context>
@ -2739,7 +2739,7 @@
</trans-unit> </trans-unit>
<trans-unit id="7500216440144530775" datatype="html"> <trans-unit id="7500216440144530775" datatype="html">
<source>Import has been completed</source> <source>Import has been completed</source>
<target state="translated">L&apos;import est terminé</target> <target state="translated">Limport est terminé</target>
<context-group purpose="location"> <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="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
@ -2835,7 +2835,7 @@
</trans-unit> </trans-unit>
<trans-unit id="8288ff761f2d259625d2e5a3d96db727926d9cd4" datatype="html"> <trans-unit id="8288ff761f2d259625d2e5a3d96db727926d9cd4" datatype="html">
<source>By Asset Class</source> <source>By Asset Class</source>
<target state="translated">Par Classe d&apos;Actifs</target> <target state="translated">Par Classe dActifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
<context context-type="linenumber">86</context> <context context-type="linenumber">86</context>
@ -3070,8 +3070,8 @@
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html"> <trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
<source> Hello, <x id="INTERPOLATION" equiv-text="{{ portfolioPublicDetails?.alias ?? &apos;someone&apos; }}"/> has shared a <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portfolio<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> with you! </source> <source> Hello, <x id="INTERPOLATION" equiv-text="{{ portfolioPublicDetails?.alias ?? ’someone’ }}"/> has shared a <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portfolio<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> with you! </source>
<target state="translated"> Bonjour, <x id="INTERPOLATION" equiv-text="{{ portfolioPublicDetails?.alias ?? &apos;someone&apos; }}"/> a partagé un <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portefeuille<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> avec vous ! </target> <target state="translated"> Bonjour, <x id="INTERPOLATION" equiv-text="{{ portfolioPublicDetails?.alias ?? ’someone’ }}"/> a partagé un <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portefeuille<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> avec vous ! </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
@ -3187,7 +3187,7 @@
</trans-unit> </trans-unit>
<trans-unit id="495a0574bd9a3d619a8b16dd5b893c6f617beded" datatype="html"> <trans-unit id="495a0574bd9a3d619a8b16dd5b893c6f617beded" datatype="html">
<source>Oops, authentication has failed.</source> <source>Oops, authentication has failed.</source>
<target state="translated">Oups, l&apos;identification a échoué.</target> <target state="translated">Oups, lidentification a échoué.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
@ -3203,7 +3203,7 @@
</trans-unit> </trans-unit>
<trans-unit id="52cd09f578994ef3573e434007c1f9c86d3e8fc0" datatype="html"> <trans-unit id="52cd09f578994ef3573e434007c1f9c86d3e8fc0" datatype="html">
<source>Go back to Home Page</source> <source>Go back to Home Page</source>
<target state="translated">Retour à la Page d&apos;Accueil</target> <target state="translated">Retour à la Page dAccueil</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
<context context-type="linenumber">31</context> <context context-type="linenumber">31</context>
@ -3319,7 +3319,7 @@
</trans-unit> </trans-unit>
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html"> <trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
<source>Annual Interest Rate</source> <source>Annual Interest Rate</source>
<target state="translated">Taux d&apos;Intérêt Annuel</target> <target state="translated">Taux dIntérêt Annuel</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
<context context-type="linenumber">21</context> <context context-type="linenumber">21</context>
@ -3387,7 +3387,7 @@
</trans-unit> </trans-unit>
<trans-unit id="4574987680940794089" datatype="html"> <trans-unit id="4574987680940794089" datatype="html">
<source>Asset Class</source> <source>Asset Class</source>
<target state="translated">Classe d&apos;Actifs</target> <target state="translated">Classe dActifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">6</context> <context context-type="linenumber">6</context>
@ -3395,7 +3395,7 @@
</trans-unit> </trans-unit>
<trans-unit id="7608037008789240367" datatype="html"> <trans-unit id="7608037008789240367" datatype="html">
<source>Asset Sub Class</source> <source>Asset Sub Class</source>
<target state="translated">Sous-classe d&apos;Actifs</target> <target state="translated">Sous-classe dActifs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">7</context> <context context-type="linenumber">7</context>
@ -3403,7 +3403,7 @@
</trans-unit> </trans-unit>
<trans-unit id="6268646680388419543" datatype="html"> <trans-unit id="6268646680388419543" datatype="html">
<source>Emergency Fund</source> <source>Emergency Fund</source>
<target state="translated">Fonds d&apos;Urgence</target> <target state="translated">Fonds dUrgence</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context> <context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context> <context context-type="linenumber">13</context>
@ -3583,7 +3583,7 @@
</trans-unit> </trans-unit>
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html"> <trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
<source>Time to add your first activity.</source> <source>Time to add your first activity.</source>
<target state="translated">Il est temps d&apos;ajouter votre première activité.</target> <target state="translated">Il est temps dajouter votre première activité.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html</context>
<context context-type="linenumber">12</context> <context context-type="linenumber">12</context>
@ -3635,7 +3635,7 @@
</trans-unit> </trans-unit>
<trans-unit id="d82473cef3cd2258eab20223ffcdd5af0c0025cc" datatype="html"> <trans-unit id="d82473cef3cd2258eab20223ffcdd5af0c0025cc" datatype="html">
<source>Valid until</source> <source>Valid until</source>
<target state="translated">Valide jusqu&apos;au</target> <target state="translated">Valide jusquau</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.html</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>
@ -3715,7 +3715,7 @@
</trans-unit> </trans-unit>
<trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html"> <trans-unit id="280c5b1f5b5b748fbbb37bf7a12c37f41539c1ff" datatype="html">
<source> Are you an ambitious investor who needs the full picture? </source> <source> Are you an ambitious investor who needs the full picture? </source>
<target state="translated"> Êtes-vous un investisseur ambitieux qui a besoin d&apos;une vue complète ? </target> <target state="translated"> Êtes-vous un investisseur ambitieux qui a besoin dune vue complète ? </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">12</context> <context context-type="linenumber">12</context>
@ -3771,7 +3771,7 @@
</trans-unit> </trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html"> <trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
<source>and more Features...</source> <source>and more Features...</source>
<target state="translated">et d&apos;autres fonctionnalités...</target> <target state="translated">et dautres fonctionnalités...</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">42</context> <context context-type="linenumber">42</context>
@ -3795,7 +3795,7 @@
</trans-unit> </trans-unit>
<trans-unit id="6dcab4069ec74eb21b38bd9f9678dc957c99618c" datatype="html"> <trans-unit id="6dcab4069ec74eb21b38bd9f9678dc957c99618c" datatype="html">
<source>Upgrade Plan</source> <source>Upgrade Plan</source>
<target state="translated">Mettre à niveau l&apos;Abonnement</target> <target state="translated">Mettre à niveau lAbonnement</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">182</context> <context context-type="linenumber">182</context>
@ -3815,7 +3815,7 @@
</trans-unit> </trans-unit>
<trans-unit id="fd30b4e3189726798f09fa0ce875486cf50dda2d" datatype="html"> <trans-unit id="fd30b4e3189726798f09fa0ce875486cf50dda2d" datatype="html">
<source> For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. </source> <source> For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. </source>
<target state="translated"> Pour les investisseurs à l&apos;aise avec la technologie qui préfèrent héberger Ghostfolio sur leur propre infrastructure. </target> <target state="translated"> Pour les investisseurs à laise avec la technologie qui préfèrent héberger Ghostfolio sur leur propre infrastructure. </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">36</context> <context context-type="linenumber">36</context>
@ -3911,7 +3911,7 @@
</trans-unit> </trans-unit>
<trans-unit id="5afce9034d974ae1e794d437885bf17b0ebf5a0c" datatype="html"> <trans-unit id="5afce9034d974ae1e794d437885bf17b0ebf5a0c" datatype="html">
<source> For ambitious investors who need the full picture of their financial assets. </source> <source> For ambitious investors who need the full picture of their financial assets. </source>
<target state="translated"> Pour les investisseurs ambitieux qui ont besoin d&apos;une vue complète de leurs actifs financiers. </target> <target state="translated"> Pour les investisseurs ambitieux qui ont besoin dune vue complète de leurs actifs financiers. </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">180</context> <context context-type="linenumber">180</context>
@ -3935,7 +3935,7 @@
</trans-unit> </trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html"> <trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
<source>It’s free.</source> <source>It’s free.</source>
<target state="translated">C&apos;est gratuit.</target> <target state="translated">Cest gratuit.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">294</context>
@ -3979,7 +3979,7 @@
</trans-unit> </trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html"> <trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
<source>Savings Rate per Month</source> <source>Savings Rate per Month</source>
<target state="translated">Taux d&apos;Épargne mensuel</target> <target state="translated">Taux dÉpargne mensuel</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
<context context-type="linenumber">10</context> <context context-type="linenumber">10</context>
@ -4051,7 +4051,7 @@
</trans-unit> </trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html"> <trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source> <source>Oops! Could not get the historical exchange rate from</source>
<target state="translated">Oups ! Nous n&apos;avons pas pu obtenir le taux de change historique à partir de</target> <target state="translated">Oups ! Nous navons pas pu obtenir le taux de change historique à partir de</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">292</context> <context context-type="linenumber">292</context>
@ -4095,7 +4095,7 @@
</trans-unit> </trans-unit>
<trans-unit id="e5580416a35e85e0ce48cf447c45043386d1027f" datatype="html"> <trans-unit id="e5580416a35e85e0ce48cf447c45043386d1027f" datatype="html">
<source>Renew Plan</source> <source>Renew Plan</source>
<target state="translated">Renouveler l&apos;Abonnement</target> <target state="translated">Renouveler lAbonnement</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">190</context> <context context-type="linenumber">190</context>
@ -4111,7 +4111,7 @@
</trans-unit> </trans-unit>
<trans-unit id="de0d77a5255f97548d2b579f78c20c911a71820f" datatype="html"> <trans-unit id="de0d77a5255f97548d2b579f78c20c911a71820f" datatype="html">
<source> Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover the costs of the hosting infrastructure and to fund ongoing development. </source> <source> Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover the costs of the hosting infrastructure and to fund ongoing development. </source>
<target state="new"> Notre offre Ghostfolio Premium cloud est la manière la plus simple de débuter. Grâce au temps qu&apos;elle économise, ce sera la meilleure option pour la plupart des gens. Les revenus sont utilisés pour couvrir les frais d&apos;infrastructures et financer le développement continu de Ghostfolio. </target> <target state="new"> Notre offre Ghostfolio Premium cloud est la manière la plus simple de débuter. Grâce au temps quelle économise, ce sera la meilleure option pour la plupart des gens. Les revenus sont utilisés pour couvrir les frais dinfrastructures et financer le développement continu de Ghostfolio. </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">6</context> <context context-type="linenumber">6</context>
@ -4127,7 +4127,7 @@
</trans-unit> </trans-unit>
<trans-unit id="3c32a07710e402b2c056bd346e7c42f6015334a6" datatype="html"> <trans-unit id="3c32a07710e402b2c056bd346e7c42f6015334a6" datatype="html">
<source>Delete User</source> <source>Delete User</source>
<target state="translated">Supprimer l&apos;Utilisateur</target> <target state="translated">Supprimer lUtilisateur</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context> <context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">232</context> <context context-type="linenumber">232</context>
@ -4143,7 +4143,7 @@
</trans-unit> </trans-unit>
<trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html"> <trans-unit id="166ccc92e1aa598f9056a260be209a0bab64d37a" datatype="html">
<source>By ETF Provider</source> <source>By ETF Provider</source>
<target state="translated">Par Émetteur d&apos;ETF</target> <target state="translated">Par Émetteur dETF</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/allocations/allocations-page.html</context>
<context context-type="linenumber">314</context> <context context-type="linenumber">314</context>
@ -4215,7 +4215,7 @@
</trans-unit> </trans-unit>
<trans-unit id="dff74da4ffb45a2fd54f31f9db9da66f7012a702" datatype="html"> <trans-unit id="dff74da4ffb45a2fd54f31f9db9da66f7012a702" datatype="html">
<source> Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: </source> <source> Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: </source>
<target state="translated"> Mettez à niveau vers Ghostfolio Premium aujourd&apos;hui et gagnez accès à des fonctionnalités exclusives pour améliorer votre expérience d&apos;investissement: </target> <target state="translated"> Mettez à niveau vers Ghostfolio Premium aujourd’hui et gagnez accès à des fonctionnalités exclusives pour améliorer votre expérience d’investissement: </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
@ -4223,7 +4223,7 @@
</trans-unit> </trans-unit>
<trans-unit id="8b17e00983a474a52d16bd139e180303703f01ff" datatype="html"> <trans-unit id="8b17e00983a474a52d16bd139e180303703f01ff" datatype="html">
<source> Get the tools to effectively manage your finances and refine your personal investment strategy. </source> <source> Get the tools to effectively manage your finances and refine your personal investment strategy. </source>
<target state="translated"> Obtenez les outils pour gérer efficacement vos finances et affinez votre stratégie d&apos;investissement personnelle. </target> <target state="translated"> Obtenez les outils pour gérer efficacement vos finances et affinez votre stratégie dinvestissement personnelle. </target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html</context>
<context context-type="linenumber">45</context> <context context-type="linenumber">45</context>
@ -5499,7 +5499,7 @@
</trans-unit> </trans-unit>
<trans-unit id="72aebdb25074909ed3dcb0866e277a1bef1a6916" datatype="html"> <trans-unit id="72aebdb25074909ed3dcb0866e277a1bef1a6916" datatype="html">
<source>✅ Yes</source> <source>✅ Yes</source>
<target state="new">✅ Yes</target> <target state="translated">✅ Oui</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context>
<context context-type="linenumber">109</context> <context context-type="linenumber">109</context>
@ -7295,7 +7295,7 @@
</trans-unit> </trans-unit>
<trans-unit id="ecdfd0aa6379102d20ffcf1e9e762edc54f148f4" datatype="html"> <trans-unit id="ecdfd0aa6379102d20ffcf1e9e762edc54f148f4" datatype="html">
<source>❌ No</source> <source>❌ No</source>
<target state="new">❌ No</target> <target state="translated">❌ Non</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">111</context>
@ -12231,7 +12231,7 @@
</trans-unit> </trans-unit>
<trans-unit id="59aece48b4cff51f656b88e8f6c4061bb03410dc" datatype="html"> <trans-unit id="59aece48b4cff51f656b88e8f6c4061bb03410dc" datatype="html">
<source>The Open Source Alternative to</source> <source>The Open Source Alternative to</source>
<target state="new">The Open Source Alternative to</target> <target state="translated">L’alternative open source à</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context>
<context context-type="linenumber">8</context> <context context-type="linenumber">8</context>
@ -13143,7 +13143,7 @@
</trans-unit> </trans-unit>
<trans-unit id="5827613432388799534" datatype="html"> <trans-unit id="5827613432388799534" datatype="html">
<source>open-source-alternative-to</source> <source>open-source-alternative-to</source>
<target state="new">open-source-alternative-to</target> <target state="translated">alternative-open-source-a</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>

8
apps/client/src/locales/messages.pt.xlf

@ -5499,7 +5499,7 @@
</trans-unit> </trans-unit>
<trans-unit id="72aebdb25074909ed3dcb0866e277a1bef1a6916" datatype="html"> <trans-unit id="72aebdb25074909ed3dcb0866e277a1bef1a6916" datatype="html">
<source>✅ Yes</source> <source>✅ Yes</source>
<target state="new">✅ Yes</target> <target state="translated">✅ Sim</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context>
<context context-type="linenumber">109</context> <context context-type="linenumber">109</context>
@ -7295,7 +7295,7 @@
</trans-unit> </trans-unit>
<trans-unit id="ecdfd0aa6379102d20ffcf1e9e762edc54f148f4" datatype="html"> <trans-unit id="ecdfd0aa6379102d20ffcf1e9e762edc54f148f4" datatype="html">
<source>❌ No</source> <source>❌ No</source>
<target state="new">❌ No</target> <target state="translated">❌ Não</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">111</context>
@ -12231,7 +12231,7 @@
</trans-unit> </trans-unit>
<trans-unit id="59aece48b4cff51f656b88e8f6c4061bb03410dc" datatype="html"> <trans-unit id="59aece48b4cff51f656b88e8f6c4061bb03410dc" datatype="html">
<source>The Open Source Alternative to</source> <source>The Open Source Alternative to</source>
<target state="new">The Open Source Alternative to</target> <target state="translated">A alternativa de software livre ao</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html</context>
<context context-type="linenumber">8</context> <context context-type="linenumber">8</context>
@ -13143,7 +13143,7 @@
</trans-unit> </trans-unit>
<trans-unit id="5827613432388799534" datatype="html"> <trans-unit id="5827613432388799534" datatype="html">
<source>open-source-alternative-to</source> <source>open-source-alternative-to</source>
<target state="new">open-source-alternative-to</target> <target state="translated">alternativa-de-software-livre-ao</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts</context>
<context context-type="linenumber">23</context> <context context-type="linenumber">23</context>

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

@ -1,6 +1,6 @@
import { Product } from '@ghostfolio/common/interfaces'; import { Product } from '@ghostfolio/common/interfaces';
export const products: Product[] = [ export const personalFinanceTools: Product[] = [
{ {
founded: 2023, founded: 2023,
hasSelfHostingAbility: false, hasSelfHostingAbility: false,

Loading…
Cancel
Save