From 54bf4c7a43217fb2f581ab6e1d11182734a81f1e Mon Sep 17 00:00:00 2001 From: alfredonodo <41476198+alfredonodo@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:51:31 +0000 Subject: [PATCH 01/29] Update messages.it.xlf (#1280) --- apps/client/src/locales/messages.it.xlf | 283 ++++++++++++++++++++++++ 1 file changed, 283 insertions(+) diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 01697c2ad..22e92f8a1 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -4,6 +4,7 @@ Create Account + Crea un account apps/client/src/app/pages/register/register-page.html 27,29 @@ -15,6 +16,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. + Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. apps/client/src/app/app.component.html 55,56 @@ -22,6 +24,7 @@ Grantee + Beneficiario apps/client/src/app/components/access-table/access-table.component.html 10 @@ -29,6 +32,7 @@ Type + Tipo apps/client/src/app/components/access-table/access-table.component.html 17 @@ -56,6 +60,7 @@ Details + Dettagli apps/client/src/app/components/access-table/access-table.component.html 27 @@ -63,6 +68,7 @@ Revoke + Revoca apps/client/src/app/components/access-table/access-table.component.html 54 @@ -70,6 +76,7 @@ Do you really want to revoke this granted access? + Vuoi davvero revocare l'accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts 49 @@ -77,6 +84,7 @@ Activities + Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 33 @@ -104,6 +112,7 @@ Name + Nome apps/client/src/app/components/accounts-table/accounts-table.component.html 3 @@ -123,6 +132,7 @@ Total + Totale apps/client/src/app/components/accounts-table/accounts-table.component.html 18 @@ -134,6 +144,7 @@ Value + Valore apps/client/src/app/components/accounts-table/accounts-table.component.html 110 @@ -157,6 +168,7 @@ Edit + Modifica apps/client/src/app/components/accounts-table/accounts-table.component.html 186 @@ -168,6 +180,7 @@ Delete + Elimina apps/client/src/app/components/accounts-table/accounts-table.component.html 194 @@ -187,6 +200,7 @@ Do you really want to delete this account? + Vuoi davvero eliminare questo account? apps/client/src/app/components/accounts-table/accounts-table.component.ts 73 @@ -194,6 +208,7 @@ Delete Jobs + Elimina i lavori apps/client/src/app/components/admin-jobs/admin-jobs.html 21 @@ -201,6 +216,7 @@ Symbol + Simbolo apps/client/src/app/components/admin-jobs/admin-jobs.html 29 @@ -220,6 +236,7 @@ Data Source + Sorgente dei dati apps/client/src/app/components/admin-jobs/admin-jobs.html 30 @@ -235,6 +252,7 @@ Attempts + Tentativi apps/client/src/app/components/admin-jobs/admin-jobs.html 31 @@ -242,6 +260,7 @@ Created + Creato apps/client/src/app/components/admin-jobs/admin-jobs.html 32 @@ -249,6 +268,7 @@ Finished + Finito apps/client/src/app/components/admin-jobs/admin-jobs.html 33 @@ -256,6 +276,7 @@ Status + Stato apps/client/src/app/components/admin-jobs/admin-jobs.html 34 @@ -263,6 +284,7 @@ Asset Profile + Profilo degli asset apps/client/src/app/components/admin-jobs/admin-jobs.html 49 @@ -270,6 +292,7 @@ Historical Market Data + Dati storici del mercato apps/client/src/app/components/admin-jobs/admin-jobs.html 54 @@ -277,6 +300,7 @@ View Data + Visualizza i dati apps/client/src/app/components/admin-jobs/admin-jobs.html 109 @@ -284,6 +308,7 @@ View Stacktrace + Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html 116 @@ -291,6 +316,7 @@ Delete Job + Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html 119 @@ -298,6 +324,7 @@ Details for + Dettagli per apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 2 @@ -305,6 +332,7 @@ Date + Data apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 6 @@ -320,6 +348,7 @@ Market Price + Prezzo di mercato apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 26 @@ -331,6 +360,7 @@ Cancel + Annulla apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 45 @@ -354,6 +384,7 @@ Save + Salva apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 47 @@ -373,6 +404,7 @@ First Activity + Prima attività apps/client/src/app/components/admin-market-data/admin-market-data.html 60 @@ -380,6 +412,7 @@ Activity Count + Conteggio attività apps/client/src/app/components/admin-market-data/admin-market-data.html 69 @@ -391,6 +424,7 @@ Historical Data + Dati storici apps/client/src/app/components/admin-market-data/admin-market-data.html 78 @@ -398,6 +432,7 @@ Gather Data + Raccogli i dati apps/client/src/app/components/admin-market-data/admin-market-data.html 119 @@ -405,6 +440,7 @@ Please add a currency: + Aggiungi una valuta: apps/client/src/app/components/admin-overview/admin-overview.component.ts 106 @@ -412,6 +448,7 @@ Do you really want to delete this coupon? + Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts 120 @@ -419,6 +456,7 @@ Do you really want to delete this currency? + Vuoi davvero eliminare questa valuta? apps/client/src/app/components/admin-overview/admin-overview.component.ts 133 @@ -426,6 +464,7 @@ Do you really want to flush the cache? + Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts 150 @@ -433,6 +472,7 @@ Please set your system message: + Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts 199 @@ -440,6 +480,7 @@ User Count + Numero di utenti apps/client/src/app/components/admin-overview/admin-overview.html 7 @@ -447,6 +488,7 @@ per User + per utente apps/client/src/app/components/admin-overview/admin-overview.html 15 @@ -454,6 +496,7 @@ Gather Recent Data + Raccogli dati recenti apps/client/src/app/components/admin-overview/admin-overview.html 33 @@ -461,6 +504,7 @@ Gather All Data + Raccogli tutti i dati apps/client/src/app/components/admin-overview/admin-overview.html 46 @@ -468,6 +512,7 @@ Gather Profile Data + Raccogli i dati del profilo apps/client/src/app/components/admin-market-data/admin-market-data.html 125 @@ -479,6 +524,7 @@ Exchange Rates + Tassi di cambio apps/client/src/app/components/admin-overview/admin-overview.html 67 @@ -486,6 +532,7 @@ Add Currency + Aggiungi valuta apps/client/src/app/components/admin-overview/admin-overview.html 106 @@ -493,6 +540,7 @@ System Message + Messaggio di sistema apps/client/src/app/components/admin-overview/admin-overview.html 112 @@ -500,6 +548,7 @@ Set Message + Imposta messaggio apps/client/src/app/components/admin-overview/admin-overview.html 134 @@ -507,6 +556,7 @@ Read-only Mode + Modalità di sola lettura apps/client/src/app/components/admin-overview/admin-overview.html 139 @@ -514,6 +564,7 @@ Coupons + Buoni sconto apps/client/src/app/components/admin-overview/admin-overview.html 152 @@ -521,6 +572,7 @@ Add + Aggiungi apps/client/src/app/components/admin-overview/admin-overview.html 183 @@ -528,6 +580,7 @@ Housekeeping + Bilancio domestico apps/client/src/app/components/admin-overview/admin-overview.html 190 @@ -535,6 +588,7 @@ Flush Cache + Svuota la cache apps/client/src/app/components/admin-overview/admin-overview.html 194 @@ -542,6 +596,7 @@ Do you really want to delete this user? + Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts 59 @@ -549,6 +604,7 @@ User + Utente apps/client/src/app/components/admin-users/admin-users.html 9 @@ -560,6 +616,7 @@ Registration + Iscrizione apps/client/src/app/components/admin-users/admin-users.html 11 @@ -567,6 +624,7 @@ Engagement per Day + Partecipazione giornaliera apps/client/src/app/components/admin-users/admin-users.html 20 @@ -574,6 +632,7 @@ Last Request + Ultima richiesta apps/client/src/app/components/admin-users/admin-users.html 22 @@ -581,6 +640,7 @@ Current Market Mood + Stato d'animo attuale del mercato apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html 12 @@ -588,6 +648,7 @@ Overview + Panoramica apps/client/src/app/components/header/header.component.html 21 @@ -599,6 +660,7 @@ Portfolio + Portafoglio apps/client/src/app/components/header/header.component.html 32 @@ -614,6 +676,7 @@ Accounts + Account apps/client/src/app/components/admin-users/admin-users.html 14 @@ -633,6 +696,7 @@ Admin Control + Controllo amministrativo apps/client/src/app/components/header/header.component.html 55 @@ -644,6 +708,7 @@ Resources + Risorse apps/client/src/app/components/header/header.component.html 66 @@ -659,6 +724,7 @@ Pricing + Prezzi apps/client/src/app/components/header/header.component.html 80 @@ -674,6 +740,7 @@ About + Informazioni su apps/client/src/app/components/header/header.component.html 91 @@ -685,6 +752,7 @@ Me + Io apps/client/src/app/components/header/header.component.html 127 @@ -692,6 +760,7 @@ My Ghostfolio + Il mio Ghostfolio apps/client/src/app/components/header/header.component.html 183 @@ -699,6 +768,7 @@ About Ghostfolio + Informazioni su Ghostfolio apps/client/src/app/components/header/header.component.html 222 @@ -706,6 +776,7 @@ Features + Funzionalità apps/client/src/app/components/header/header.component.html 246 @@ -713,6 +784,7 @@ Markets + Mercati apps/client/src/app/components/header/header.component.html 280 @@ -724,6 +796,7 @@ Get Started + Iniziare apps/client/src/app/pages/public/public-page.html 137 @@ -731,6 +804,7 @@ Sign in + Accedi apps/client/src/app/components/header/header.component.ts 112 @@ -742,6 +816,7 @@ Oops! Incorrect Security Token. + Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts 126 @@ -749,6 +824,7 @@ Manage Activities + Gestione delle attività apps/client/src/app/components/home-holdings/home-holdings.html 30 @@ -760,6 +836,7 @@ Last Days + Ultimi giorni apps/client/src/app/components/home-market/home-market.html 6 @@ -767,6 +844,7 @@ Summary + Riepilogo apps/client/src/app/components/home-summary/home-summary.html 6 @@ -774,6 +852,7 @@ Security Token + Token di sicurezza apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 10,14 @@ -785,6 +864,7 @@ or + oppure apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 20,22 @@ -800,6 +880,7 @@ Sign in with Internet Identity + Accedi con Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 30,32 @@ -807,6 +888,7 @@ Sign in with Google + Accedi con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 37,43 @@ -814,6 +896,7 @@ Stay signed in + Rimani connesso apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 46,52 @@ -821,6 +904,7 @@ Sign in + Accedi apps/client/src/app/components/header/header.component.html 289 @@ -832,6 +916,7 @@ Time in Market + Tempo nel mercato apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 3 @@ -839,6 +924,7 @@ Buy + Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 12 @@ -846,6 +932,7 @@ Sell + Vendi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 23 @@ -853,6 +940,7 @@ Investment + Investimento apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 40 @@ -864,6 +952,7 @@ Absolute Gross Performance + Prestazioni lorde assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 51 @@ -871,6 +960,7 @@ Gross Performance (TWR) + Prestazioni lorde (TWR) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 62 @@ -878,6 +968,7 @@ Fees for + Commissioni per apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 77,80 @@ -885,6 +976,7 @@ {VAR_PLURAL, plural, =1 {transaction} other {transactions}} + {VAR_PLURAL, plural, =1 {transaction} altre {transactions}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 78,79 @@ -892,6 +984,7 @@ Absolute Net Performance + Prestazioni nette assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 95 @@ -899,6 +992,7 @@ Net Performance (TWR) + Prestazioni nette (TWR) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 106 @@ -906,6 +1000,7 @@ Total Assets + Asset totali apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 122 @@ -913,6 +1008,7 @@ Valuables + Oggetti di valore apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 134 @@ -920,6 +1016,7 @@ Emergency Fund + Fondo di emergenza apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 145 @@ -927,6 +1024,7 @@ Buying Power + Potere d'acquisto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 165 @@ -934,6 +1032,7 @@ Net Worth + Patrimonio netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 179 @@ -941,6 +1040,7 @@ Annualized Performance + Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 190 @@ -948,6 +1048,7 @@ Dividend + Dividendo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 206 @@ -955,6 +1056,7 @@ Please enter the amount of your emergency fund: + Inserisci l'importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 52 @@ -962,6 +1064,7 @@ Sectors + Settori apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 187 @@ -973,6 +1076,7 @@ Countries + Paesi apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 198 @@ -980,6 +1084,7 @@ Tags + Tag apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 234 @@ -991,6 +1096,7 @@ Report Data Glitch + Segnala un'anomalia dei dati apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 249 @@ -998,6 +1104,7 @@ Allocation + Allocazione apps/client/src/app/components/positions-table/positions-table.component.html 72 @@ -1005,6 +1112,7 @@ Performance + Prestazioni apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 55 @@ -1016,6 +1124,7 @@ Show all + Mostra tutti apps/client/src/app/components/positions-table/positions-table.component.html 137 @@ -1023,6 +1132,7 @@ Today + Oggi apps/client/src/app/components/toggle/toggle.component.ts 21 @@ -1030,6 +1140,7 @@ YTD + anno corrente apps/client/src/app/components/toggle/toggle.component.ts 22 @@ -1037,6 +1148,7 @@ 1Y + 1 anno apps/client/src/app/components/toggle/toggle.component.ts 23 @@ -1044,6 +1156,7 @@ 5Y + 5 anni apps/client/src/app/components/toggle/toggle.component.ts 24 @@ -1051,6 +1164,7 @@ Max + Massimo apps/client/src/app/components/toggle/toggle.component.ts 25 @@ -1058,6 +1172,7 @@ This feature requires a subscription. + Questa funzione richiede un abbonamento. apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1065,6 +1180,7 @@ Upgrade Plan + Piano di aggiornamento apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1072,6 +1188,7 @@ Okay + Bene apps/client/src/app/core/http-response.interceptor.ts 89 @@ -1079,6 +1196,7 @@ About + Informazioni su apps/client/src/app/pages/about/about-page-routing.module.ts 12 @@ -1086,6 +1204,7 @@ Privacy Policy + Informativa sulla privacy apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html 4 @@ -1093,6 +1212,7 @@ Blog + Blog apps/client/src/app/pages/blog/blog-page.html 4 @@ -1100,6 +1220,7 @@ Changelog & License + Registro delle modifiche & Licenza apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts 12 @@ -1107,6 +1228,7 @@ Changelog + Registro delle modifiche apps/client/src/app/pages/about/changelog/changelog-page.html 4 @@ -1114,6 +1236,7 @@ License + Licenza d'uso apps/client/src/app/pages/about/changelog/changelog-page.html 15 @@ -1121,6 +1244,7 @@ Privacy Policy + Informativa sulla privacy apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts 12 @@ -1128,6 +1252,7 @@ My Ghostfolio + Il mio Ghostfolio apps/client/src/app/pages/account/account-page-routing.module.ts 12 @@ -1135,6 +1260,7 @@ Please enter your coupon code: + Inserisci il tuo codice del buono: apps/client/src/app/pages/account/account-page.component.ts 225 @@ -1142,6 +1268,7 @@ Could not redeem coupon code + Impossibile riscattare il codice del buono apps/client/src/app/pages/account/account-page.component.ts 235 @@ -1149,6 +1276,7 @@ Coupon code has been redeemed + Il codice del buono è stato riscattato apps/client/src/app/pages/account/account-page.component.ts 247 @@ -1156,6 +1284,7 @@ Reload + Ricarica apps/client/src/app/pages/account/account-page.component.ts 248 @@ -1163,6 +1292,7 @@ Do you really want to remove this sign in method? + Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/pages/account/account-page.component.ts 294 @@ -1170,6 +1300,7 @@ Account + Account apps/client/src/app/pages/account/account-page.html 4 @@ -1185,6 +1316,7 @@ Membership + Iscrizione apps/client/src/app/pages/account/account-page.html 15 @@ -1192,6 +1324,7 @@ Upgrade + Aggiornamento apps/client/src/app/pages/account/account-page.html 37 @@ -1199,6 +1332,7 @@ per year + per anno apps/client/src/app/pages/account/account-page.html 48 @@ -1206,6 +1340,7 @@ Try Premium + Prova Premium apps/client/src/app/pages/account/account-page.html 56 @@ -1213,6 +1348,7 @@ Redeem Coupon + Riscatta il buono apps/client/src/app/pages/account/account-page.html 68 @@ -1220,6 +1356,7 @@ Presenter View + Vista presentatore apps/client/src/app/pages/account/account-page.html 75 @@ -1227,6 +1364,7 @@ Hides sensitive values such as absolute performances and quantities. + Nasconde valori sensibili come le prestazioni e le quantità assolute. apps/client/src/app/pages/account/account-page.html 76,79 @@ -1234,6 +1372,7 @@ Base Currency + Valuta base apps/client/src/app/pages/account/account-page.html 94 @@ -1241,6 +1380,7 @@ Locale + Locale apps/client/src/app/pages/account/account-page.html 135 @@ -1248,6 +1388,7 @@ Date and number format + Formato data e numero apps/client/src/app/pages/account/account-page.html 137 @@ -1255,6 +1396,7 @@ View Mode + Modalità di visualizzazione apps/client/src/app/pages/account/account-page.html 160 @@ -1262,6 +1404,7 @@ Sign in with fingerprint + Accesso con impronta digitale apps/client/src/app/pages/account/account-page.html 181 @@ -1269,6 +1412,7 @@ User ID + ID utente apps/client/src/app/pages/account/account-page.html 208 @@ -1276,6 +1420,7 @@ Granted Access + Accesso concesso apps/client/src/app/pages/account/account-page.html 217 @@ -1283,6 +1428,7 @@ Grant access + Concedi l'accesso apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1290,6 +1436,7 @@ Public + Pubblico apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -1297,6 +1444,7 @@ Accounts + Account apps/client/src/app/pages/accounts/accounts-page-routing.module.ts 12 @@ -1304,6 +1452,7 @@ Update account + Aggiorna account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 2 @@ -1311,6 +1460,7 @@ Add account + Aggiungi un account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 3 @@ -1318,6 +1468,7 @@ Cash + Contanti apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 15 @@ -1325,6 +1476,7 @@ Securities + Titoli apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 16 @@ -1332,6 +1484,7 @@ Currency + Valuta apps/client/src/app/components/accounts-table/accounts-table.component.html 23 @@ -1351,6 +1504,7 @@ Cash Balance + Saldo di cassa apps/client/src/app/components/accounts-table/accounts-table.component.html 76 @@ -1362,6 +1516,7 @@ Platform + Piattaforma apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1373,6 +1528,7 @@ Account ID + ID account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 55 @@ -1380,6 +1536,7 @@ Admin Control + Controllo amministrativo apps/client/src/app/pages/admin/admin-page-routing.module.ts 23 @@ -1387,6 +1544,7 @@ Blog + Blog apps/client/src/app/pages/blog/blog-page-routing.module.ts 12 @@ -1394,6 +1552,7 @@ As you are already logged in, you cannot access the demo account. + Poiché hai già effettuato l’accesso, non puoi accedere all'account demo. apps/client/src/app/pages/demo/demo-page.component.ts 31 @@ -1401,6 +1560,7 @@ FAQ + FAQ apps/client/src/app/pages/faq/faq-page-routing.module.ts 12 @@ -1408,6 +1568,7 @@ Features + Funzionalità apps/client/src/app/pages/features/features-page-routing.module.ts 12 @@ -1415,6 +1576,7 @@ Overview + Panoramica apps/client/src/app/pages/home/home-page-routing.module.ts 23 @@ -1426,6 +1588,7 @@ Markets + Mercati apps/client/src/app/pages/markets/markets-page-routing.module.ts 12 @@ -1433,6 +1596,7 @@ Allocations + Allocazioni apps/client/src/app/pages/portfolio/allocations/allocations-page-routing.module.ts 12 @@ -1440,6 +1604,7 @@ Allocations + Allocazioni apps/client/src/app/pages/portfolio/allocations/allocations-page.html 4 @@ -1451,6 +1616,7 @@ By Account + Per account apps/client/src/app/pages/portfolio/allocations/allocations-page.html 33 @@ -1458,6 +1624,7 @@ By Currency + Per valuta apps/client/src/app/pages/portfolio/allocations/allocations-page.html 58 @@ -1465,6 +1632,7 @@ By Asset Class + Per asset class apps/client/src/app/pages/portfolio/allocations/allocations-page.html 86 @@ -1472,6 +1640,7 @@ By Holding + Per partecipazione apps/client/src/app/pages/portfolio/allocations/allocations-page.html 114 @@ -1479,6 +1648,7 @@ By Sector + Per settore apps/client/src/app/pages/portfolio/allocations/allocations-page.html 142 @@ -1486,6 +1656,7 @@ By Continent + Per continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html 171 @@ -1493,6 +1664,7 @@ By Country + Per paese apps/client/src/app/pages/portfolio/allocations/allocations-page.html 199 @@ -1500,6 +1672,7 @@ Regions + Regioni apps/client/src/app/pages/portfolio/allocations/allocations-page.html 230 @@ -1511,6 +1684,7 @@ Analysis + Analisi apps/client/src/app/pages/portfolio/analysis/analysis-page-routing.module.ts 12 @@ -1518,6 +1692,7 @@ Analysis + Analisi apps/client/src/app/pages/portfolio/analysis/analysis-page.html 2 @@ -1529,6 +1704,7 @@ Investment Timeline + Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html 105 @@ -1536,6 +1712,7 @@ Top + In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html 26 @@ -1543,6 +1720,7 @@ Bottom + In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html 62 @@ -1550,6 +1728,7 @@ FIRE + FIRE apps/client/src/app/pages/portfolio/fire/fire-page-routing.module.ts 12 @@ -1557,6 +1736,7 @@ FIRE + FIRE apps/client/src/app/pages/portfolio/fire/fire-page.html 4 @@ -1568,6 +1748,7 @@ Calculator + Calcolatrice apps/client/src/app/pages/portfolio/fire/fire-page.html 6 @@ -1575,6 +1756,7 @@ 4% Rule + Regola del 4% apps/client/src/app/pages/portfolio/fire/fire-page.html 20 @@ -1582,6 +1764,7 @@ Holdings + Partecipazioni apps/client/src/app/pages/portfolio/holdings/holdings-page-routing.module.ts 12 @@ -1589,6 +1772,7 @@ Holdings + Partecipazioni apps/client/src/app/pages/portfolio/holdings/holdings-page.html 4 @@ -1604,6 +1788,7 @@ Get an overview of your current holdings. + Ottieni una panoramica delle tue attuali partecipazioni. apps/client/src/app/pages/portfolio/portfolio-page.html 7,9 @@ -1611,6 +1796,7 @@ Open Holdings + Apri le partecipazioni apps/client/src/app/pages/portfolio/portfolio-page.html 16 @@ -1618,6 +1804,7 @@ Manage your activities: stocks, ETFs, cryptocurrencies, dividend, and valuables. + Gestisci le tue attività: azioni, ETF, criptovalute, dividendi e oggetti di valore. apps/client/src/app/pages/portfolio/portfolio-page.html 25,28 @@ -1625,6 +1812,7 @@ Open Activities + Apri le attività apps/client/src/app/pages/portfolio/portfolio-page.html 35 @@ -1632,6 +1820,7 @@ Check the allocations of your portfolio by account, asset class, currency, sector and region. + Controlla le allocazioni del tuo portafoglio per account, asset class, valuta, settore e regione. apps/client/src/app/pages/portfolio/portfolio-page.html 50,53 @@ -1639,6 +1828,7 @@ Open Allocations + Apri le allocazioni apps/client/src/app/pages/portfolio/portfolio-page.html 60 @@ -1646,6 +1836,7 @@ Ghostfolio Analysis visualizes your portfolio and shows your top and bottom performers. + Ghostfolio Analysis visualizza il tuo portafoglio e mostra i tuoi migliori e peggiori risultati. apps/client/src/app/pages/portfolio/portfolio-page.html 75,78 @@ -1653,6 +1844,7 @@ Open Analysis + Apri le analisi apps/client/src/app/pages/portfolio/portfolio-page.html 85 @@ -1660,6 +1852,7 @@ Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. + Ghostfolio X-ray utilizza l'analisi statica per identificare potenziali problemi e rischi nel tuo portafoglio. apps/client/src/app/pages/portfolio/portfolio-page.html 100,103 @@ -1667,6 +1860,7 @@ Open X-ray + Apri X-ray apps/client/src/app/pages/portfolio/portfolio-page.html 106 @@ -1674,6 +1868,7 @@ Ghostfolio FIRE calculates metrics for the Financial Independence, Retire Early lifestyle. + Ghostfolio FIRE calcola le metriche per l’Indipendenza finanziaria, il pensionamento anticipato. apps/client/src/app/pages/portfolio/portfolio-page.html 121,124 @@ -1681,6 +1876,7 @@ Open FIRE + Apri FIRE apps/client/src/app/pages/portfolio/portfolio-page.html 127 @@ -1688,6 +1884,7 @@ Update activity + Aggiorna l'attività apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 7,8 @@ -1695,6 +1892,7 @@ Add activity + Aggiungi un'attività apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 8,11 @@ -1702,6 +1900,7 @@ BUY + ACQUISTO apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 14,15 @@ -1709,6 +1908,7 @@ DIVIDEND + DIVIDENDO apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 15,17 @@ -1716,6 +1916,7 @@ ITEM + ARTICOLO apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 16,18 @@ -1723,6 +1924,7 @@ SELL + VENDITA apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 17,21 @@ -1730,6 +1932,7 @@ Name, symbol or ISIN + Nome, simbolo o ISIN apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 37,40 @@ -1737,6 +1940,7 @@ Quantity + Quantità apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 107 @@ -1752,6 +1956,7 @@ Unit Price + Prezzo unitario apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 112,113 @@ -1763,6 +1968,7 @@ Fee + Commissione apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 131,132 @@ -1774,6 +1980,7 @@ Note + Nota apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 140,143 @@ -1781,6 +1988,7 @@ Asset Class + Asset class apps/client/src/app/components/admin-market-data/admin-market-data.html 42 @@ -1796,6 +2004,7 @@ Activities + Attività apps/client/src/app/pages/portfolio/transactions/transactions-page-routing.module.ts 12 @@ -1803,6 +2012,7 @@ Importing data... + Importazione dei dati... apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts 191 @@ -1810,6 +2020,7 @@ Import has been completed + L'importazione è stata completata apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts 337 @@ -1817,6 +2028,7 @@ Pricing + Prezzi apps/client/src/app/pages/pricing/pricing-page-routing.module.ts 12 @@ -1824,6 +2036,7 @@ Portfolio + Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 111 @@ -1835,6 +2048,7 @@ Currencies + Valute apps/client/src/app/pages/public/public-page.html 30 @@ -1842,6 +2056,7 @@ Continents + Continenti apps/client/src/app/pages/public/public-page.html 60 @@ -1849,6 +2064,7 @@ Ghostfolio empowers you to keep track of your wealth. + Ghostfolio ti permette di tenere traccia della tua ricchezza. apps/client/src/app/pages/public/public-page.html 132,134 @@ -1856,6 +2072,7 @@ Registration + Iscrizione apps/client/src/app/pages/register/register-page-routing.module.ts 12 @@ -1863,6 +2080,7 @@ Continue with Internet Identity + Continua con Internet Identity apps/client/src/app/pages/register/register-page.html 41,43 @@ -1870,6 +2088,7 @@ Continue with Google + Continua con Google apps/client/src/app/pages/register/register-page.html 48,53 @@ -1877,6 +2096,7 @@ Copy to clipboard + Copia negli appunti apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 26 @@ -1884,6 +2104,7 @@ I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. + Accetto di aver memorizzato il mio Token di sicurezza sopra citato in un luogo sicuro. Se lo perdo, non posso recuperare il mio account. apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 31,34 @@ -1891,6 +2112,7 @@ Agree and continue + Accetta e continua apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 44 @@ -1898,6 +2120,7 @@ Resources + Risorse apps/client/src/app/pages/resources/resources-page-routing.module.ts 12 @@ -1905,6 +2128,7 @@ Oops, authentication has failed. + Ops, l'autenticazione non è riuscita. apps/client/src/app/pages/webauthn/webauthn-page.html 18 @@ -1912,6 +2136,7 @@ Try again + Riprova apps/client/src/app/pages/webauthn/webauthn-page.html 26 @@ -1919,6 +2144,7 @@ Go back to Home Page + Torna alla pagina iniziale apps/client/src/app/pages/webauthn/webauthn-page.html 30 @@ -1926,6 +2152,7 @@ Draft + Bozza libs/ui/src/lib/activities-table/activities-table.component.html 95 @@ -1933,6 +2160,7 @@ Import Activities + Importa le attività libs/ui/src/lib/activities-table/activities-table.component.html 319 @@ -1940,6 +2168,7 @@ Export Activities + Esporta le attività libs/ui/src/lib/activities-table/activities-table.component.html 329 @@ -1947,6 +2176,7 @@ Export Drafts as ICS + Esporta le bozze come ICS libs/ui/src/lib/activities-table/activities-table.component.html 339 @@ -1954,6 +2184,7 @@ Clone + Clona libs/ui/src/lib/activities-table/activities-table.component.html 369 @@ -1961,6 +2192,7 @@ Export Draft as ICS + Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html 377 @@ -1968,6 +2200,7 @@ Do you really want to delete this activity? + Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts 134 @@ -1975,6 +2208,7 @@ Index + Indice libs/ui/src/lib/benchmark/benchmark.component.html 3 @@ -1982,6 +2216,7 @@ Change from All Time High + Variazione rispetto al massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html 12 @@ -1989,6 +2224,7 @@ from ATH + dal massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html 14 @@ -1996,6 +2232,7 @@ Savings Rate + Tasso di risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.html 10 @@ -2003,6 +2240,7 @@ per month + al mese libs/ui/src/lib/fire-calculator/fire-calculator.component.html 17 @@ -2010,6 +2248,7 @@ Investment Horizon + Orizzonte di investimento libs/ui/src/lib/fire-calculator/fire-calculator.component.html 21 @@ -2017,6 +2256,7 @@ years + anni libs/ui/src/lib/fire-calculator/fire-calculator.component.html 23 @@ -2024,6 +2264,7 @@ Annual Interest Rate + Tasso di interesse annuo libs/ui/src/lib/fire-calculator/fire-calculator.component.html 27 @@ -2031,6 +2272,7 @@ Beta + Beta apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 5 @@ -2042,6 +2284,7 @@ Time to add your first activity. + È il momento di aggiungere la tua prima attività. libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html 12 @@ -2049,6 +2292,7 @@ Language + Lingua apps/client/src/app/pages/account/account-page.html 115 @@ -2056,6 +2300,7 @@ Data Management + Gestione dei dati apps/client/src/app/components/admin-overview/admin-overview.html 20 @@ -2063,6 +2308,7 @@ Get started + Inizia apps/client/src/app/components/header/header.component.html 297 @@ -2070,6 +2316,7 @@ This feature is currently unavailable. + Questa funzionalità non è attualmente disponibile. apps/client/src/app/core/http-response.interceptor.ts 59 @@ -2077,6 +2324,7 @@ Oops! Something went wrong. + Ops! Qualcosa è andato storto. apps/client/src/app/core/http-response.interceptor.ts 86 @@ -2084,6 +2332,7 @@ Please try again later. + Riprova più tardi. apps/client/src/app/core/http-response.interceptor.ts 61 @@ -2095,6 +2344,7 @@ Change + Modifica apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 44 @@ -2102,6 +2352,7 @@ Developed Markets + Mercati sviluppati apps/client/src/app/pages/portfolio/allocations/allocations-page.html 256 @@ -2113,6 +2364,7 @@ Asset Sub Class + Sub-asset class apps/client/src/app/components/admin-market-data/admin-market-data.html 51 @@ -2128,6 +2380,7 @@ Average Unit Price + Prezzo unitario medio apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 65 @@ -2135,6 +2388,7 @@ Maximum Price + Prezzo massimo apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 97 @@ -2142,6 +2396,7 @@ Other Markets + Altri mercati apps/client/src/app/pages/portfolio/allocations/allocations-page.html 274 @@ -2153,6 +2408,7 @@ Emerging Markets + Mercati emergenti apps/client/src/app/pages/portfolio/allocations/allocations-page.html 265 @@ -2164,6 +2420,7 @@ Sector + Settore apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 169 @@ -2171,6 +2428,7 @@ Country + Paese apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 181 @@ -2178,6 +2436,7 @@ Minimum Price + Prezzo minimo apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 86 @@ -2185,6 +2444,7 @@ First Buy Date + Data del primo acquisto apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 127 @@ -2192,6 +2452,7 @@ Transactions + Transazioni apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 136 @@ -2199,6 +2460,7 @@ Projected Total Amount + Importo totale previsto libs/ui/src/lib/fire-calculator/fire-calculator.component.html 44 @@ -2206,6 +2468,7 @@ Savings + Risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.ts 296 @@ -2213,6 +2476,7 @@ Accumulating + Accumulo apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 39 @@ -2220,6 +2484,7 @@ Initial + Iniziale apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts 57 @@ -2227,6 +2492,7 @@ Interest + Interesse libs/ui/src/lib/fire-calculator/fire-calculator.component.ts 286 @@ -2234,6 +2500,7 @@ Deposit + Deposito apps/client/src/app/components/investment-chart/investment-chart.component.ts 132 @@ -2245,6 +2512,7 @@ Current + Attuale apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts 58 @@ -2252,6 +2520,7 @@ Monthly + Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 38 @@ -2259,6 +2528,7 @@ Sectors Count + Numero di settori apps/client/src/app/components/admin-market-data/admin-market-data.html 96 @@ -2266,6 +2536,7 @@ Countries Count + Numero di paesi apps/client/src/app/components/admin-market-data/admin-market-data.html 87 @@ -2273,6 +2544,7 @@ Fear + Paura apps/client/src/app/components/home-market/home-market.component.ts 24 @@ -2280,6 +2552,7 @@ Greed + Avidità apps/client/src/app/components/home-market/home-market.component.ts 25 @@ -2287,6 +2560,7 @@ Filter by account or tag... + Filtra per account o tag... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts 136 @@ -2298,6 +2572,7 @@ Filter by... + Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 128 @@ -2305,6 +2580,7 @@ Filter by account, currency, symbol or type... + Filtra per account, valuta, simbolo o tipo... libs/ui/src/lib/activities-table/activities-table.component.ts 291 @@ -2312,6 +2588,7 @@ Hello, has shared a Portfolio with you! + Salve, ha condiviso un Portafoglio con te! apps/client/src/app/pages/public/public-page.html 4,7 @@ -2319,6 +2596,7 @@ Alias + Alias apps/client/src/app/components/access-table/access-table.component.html 3 @@ -2330,6 +2608,7 @@ Experimental Features + Funzionalità sperimentali apps/client/src/app/pages/account/account-page.html 196 @@ -2337,6 +2616,7 @@ Benchmark + Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 120 @@ -2344,6 +2624,7 @@ Benchmarks + Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 4 @@ -2351,6 +2632,7 @@ Compare with... + Confronta con... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 14 @@ -2358,6 +2640,7 @@ Proportion of Net Worth + Percentuale del patrimonio netto apps/client/src/app/pages/portfolio/allocations/allocations-page.html 17 From 862f670ccff3973112685d930e640f4e2d10bf56 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Sep 2022 20:52:03 +0200 Subject: [PATCH 02/29] Feature/setup italiano (#1276) * Setup italiano * Update changelog --- CHANGELOG.md | 8 +++++++- apps/api/src/app/frontend.middleware.ts | 14 ++++++++++++++ .../app/pages/account/account-page.component.ts | 2 +- .../client/src/app/pages/account/account-page.html | 1 + libs/common/src/lib/helper.ts | 4 +++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaac689d0..8bc2e7a9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Set up the language localization for Italiano (`it`) + ## 1.195.0 - 20.09.2022 ### Changed @@ -195,7 +201,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Set up `ng-extract-i18n-merge` to improve the i18n extraction and merge workflow -- Set up language localization for German (`de`) +- Set up the language localization for German (`de`) - Resolved the feature graphic of the blog post ### Changed diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts index b650555fd..aec14e3ee 100644 --- a/apps/api/src/app/frontend.middleware.ts +++ b/apps/api/src/app/frontend.middleware.ts @@ -11,6 +11,7 @@ import { NextFunction, Request, Response } from 'express'; export class FrontendMiddleware implements NestMiddleware { public indexHtmlDe = ''; public indexHtmlEn = ''; + public indexHtmlIt = ''; public isProduction: boolean; public constructor( @@ -32,6 +33,10 @@ export class FrontendMiddleware implements NestMiddleware { this.getPathOfIndexHtmlFile(DEFAULT_LANGUAGE_CODE), 'utf8' ); + this.indexHtmlIt = fs.readFileSync( + this.getPathOfIndexHtmlFile('it'), + 'utf8' + ); } catch {} } @@ -61,6 +66,15 @@ export class FrontendMiddleware implements NestMiddleware { rootUrl: this.configurationService.get('ROOT_URL') }) ); + } else if (req.path === '/it' || req.path.startsWith('/it/')) { + res.send( + this.interpolate(this.indexHtmlIt, { + featureGraphicPath, + languageCode: 'it', + path: req.path, + rootUrl: this.configurationService.get('ROOT_URL') + }) + ); } else { res.send( this.interpolate(this.indexHtmlEn, { diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index 8a04e2b5e..3f7ec90d5 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -54,7 +54,7 @@ export class AccountPageComponent implements OnDestroy, OnInit { public hasPermissionToUpdateViewMode: boolean; public hasPermissionToUpdateUserSettings: boolean; public language = document.documentElement.lang; - public locales = ['de', 'de-CH', 'en-GB', 'en-US']; + public locales = ['de', 'de-CH', 'en-GB', 'en-US', 'it']; public price: number; public priceId: string; public snackBarRef: MatSnackBarRef; diff --git a/apps/client/src/app/pages/account/account-page.html b/apps/client/src/app/pages/account/account-page.html index 306a9f70a..eb0db74b9 100644 --- a/apps/client/src/app/pages/account/account-page.html +++ b/apps/client/src/app/pages/account/account-page.html @@ -126,6 +126,7 @@ Deutsch English + Italiano diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 9547ac3c5..693e2183b 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -1,7 +1,7 @@ import * as currencies from '@dinero.js/currencies'; import { DataSource } from '@prisma/client'; import { getDate, getMonth, getYear, parse, subDays } from 'date-fns'; -import { de } from 'date-fns/locale'; +import { de, it } from 'date-fns/locale'; import { ghostfolioScraperApiSymbolPrefix, locale } from './config'; import { Benchmark } from './interfaces'; @@ -75,6 +75,8 @@ export function getCssVariable(aCssVariable: string) { export function getDateFnsLocale(aLanguageCode: string) { if (aLanguageCode === 'de') { return de; + } else if (aLanguageCode === 'it') { + return it; } return undefined; From 8f2caa508ae38c1a603c85ada224588a9dad102c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Sep 2022 20:52:46 +0200 Subject: [PATCH 03/29] Feature/extend landing page (#1279) * Extend landing page * Update changelog --- CHANGELOG.md | 1 + .../src/app/pages/landing/landing-page.html | 64 ++++++++++++++++--- .../app/pages/landing/landing-page.module.ts | 2 + 3 files changed, 58 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bc2e7a9b..53643c9e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Set up the language localization for Italiano (`it`) +- Extended the landing page ## 1.195.0 - 20.09.2022 diff --git a/apps/client/src/app/pages/landing/landing-page.html b/apps/client/src/app/pages/landing/landing-page.html index 7527faa13..f2f287940 100644 --- a/apps/client/src/app/pages/landing/landing-page.html +++ b/apps/client/src/app/pages/landing/landing-page.html @@ -55,6 +55,28 @@ +
+
+ + 360° View + Get the full picture of your personal finances across multiple + platforms. + +
+
+ + Web3 Ready + Use Ghostfolio anonymously and own your financial data. + +
+
+ + Open Source + Benefit from continuous improvements through a strong community. + +
+
+

Why Ghostfolio?

@@ -133,19 +155,43 @@
-
-
+
+

How does Ghostfolio work?

Get started in only 3 steps

-
    -
  1. - Sign up anonymously
    (no e-mail address nor credit card required) -
  2. -
  3. Add any of your historical transactions
  4. -
  5. Get valuable insights of your portfolio composition
  6. -
+
+
+ +
+
Sign up anonymously*
+
+ * no e-mail address nor credit card required +
+
+
1
+
+
+
+ +
+
+ Add any of your historical transactions +
+
+
2
+
+
+
+ +
+
+ Get valuable insights of your portfolio composition +
+
+
3
+
diff --git a/apps/client/src/app/pages/landing/landing-page.module.ts b/apps/client/src/app/pages/landing/landing-page.module.ts index d0d02b480..2116d972d 100644 --- a/apps/client/src/app/pages/landing/landing-page.module.ts +++ b/apps/client/src/app/pages/landing/landing-page.module.ts @@ -1,6 +1,7 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; import { RouterModule } from '@angular/router'; import { GfLogoModule } from '@ghostfolio/ui/logo'; @@ -14,6 +15,7 @@ import { LandingPageComponent } from './landing-page.component'; GfLogoModule, LandingPageRoutingModule, MatButtonModule, + MatCardModule, RouterModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA] From e093041184837d26a7110a5605ef5d9fc6935dc9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Sep 2022 21:05:05 +0200 Subject: [PATCH 04/29] Release 1.196.0 (#1281) --- CHANGELOG.md | 2 +- apps/client/src/locales/messages.it.xlf | 566 ++++++++++++------------ package.json | 2 +- 3 files changed, 285 insertions(+), 285 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53643c9e7..7a7960187 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.196.0 - 22.09.2022 ### Added diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 22e92f8a1..1e31425cc 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -4,7 +4,7 @@ Create Account - Crea un account + Crea un account apps/client/src/app/pages/register/register-page.html 27,29 @@ -16,7 +16,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. - Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. + Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. apps/client/src/app/app.component.html 55,56 @@ -24,7 +24,7 @@ Grantee - Beneficiario + Beneficiario apps/client/src/app/components/access-table/access-table.component.html 10 @@ -32,7 +32,7 @@ Type - Tipo + Tipo apps/client/src/app/components/access-table/access-table.component.html 17 @@ -60,7 +60,7 @@ Details - Dettagli + Dettagli apps/client/src/app/components/access-table/access-table.component.html 27 @@ -68,7 +68,7 @@ Revoke - Revoca + Revoca apps/client/src/app/components/access-table/access-table.component.html 54 @@ -76,7 +76,7 @@ Do you really want to revoke this granted access? - Vuoi davvero revocare l'accesso concesso? + Vuoi davvero revocare l'accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts 49 @@ -84,7 +84,7 @@ Activities - Attività + Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 33 @@ -112,7 +112,7 @@ Name - Nome + Nome apps/client/src/app/components/accounts-table/accounts-table.component.html 3 @@ -132,7 +132,7 @@ Total - Totale + Totale apps/client/src/app/components/accounts-table/accounts-table.component.html 18 @@ -144,7 +144,7 @@ Value - Valore + Valore apps/client/src/app/components/accounts-table/accounts-table.component.html 110 @@ -168,7 +168,7 @@ Edit - Modifica + Modifica apps/client/src/app/components/accounts-table/accounts-table.component.html 186 @@ -180,7 +180,7 @@ Delete - Elimina + Elimina apps/client/src/app/components/accounts-table/accounts-table.component.html 194 @@ -200,7 +200,7 @@ Do you really want to delete this account? - Vuoi davvero eliminare questo account? + Vuoi davvero eliminare questo account? apps/client/src/app/components/accounts-table/accounts-table.component.ts 73 @@ -208,7 +208,7 @@ Delete Jobs - Elimina i lavori + Elimina i lavori apps/client/src/app/components/admin-jobs/admin-jobs.html 21 @@ -216,7 +216,7 @@ Symbol - Simbolo + Simbolo apps/client/src/app/components/admin-jobs/admin-jobs.html 29 @@ -236,7 +236,7 @@ Data Source - Sorgente dei dati + Sorgente dei dati apps/client/src/app/components/admin-jobs/admin-jobs.html 30 @@ -252,7 +252,7 @@ Attempts - Tentativi + Tentativi apps/client/src/app/components/admin-jobs/admin-jobs.html 31 @@ -260,7 +260,7 @@ Created - Creato + Creato apps/client/src/app/components/admin-jobs/admin-jobs.html 32 @@ -268,7 +268,7 @@ Finished - Finito + Finito apps/client/src/app/components/admin-jobs/admin-jobs.html 33 @@ -276,7 +276,7 @@ Status - Stato + Stato apps/client/src/app/components/admin-jobs/admin-jobs.html 34 @@ -284,7 +284,7 @@ Asset Profile - Profilo degli asset + Profilo degli asset apps/client/src/app/components/admin-jobs/admin-jobs.html 49 @@ -292,7 +292,7 @@ Historical Market Data - Dati storici del mercato + Dati storici del mercato apps/client/src/app/components/admin-jobs/admin-jobs.html 54 @@ -300,7 +300,7 @@ View Data - Visualizza i dati + Visualizza i dati apps/client/src/app/components/admin-jobs/admin-jobs.html 109 @@ -308,7 +308,7 @@ View Stacktrace - Visualizza Stacktrace + Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html 116 @@ -316,7 +316,7 @@ Delete Job - Elimina il lavoro + Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html 119 @@ -324,7 +324,7 @@ Details for - Dettagli per + Dettagli per apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 2 @@ -332,7 +332,7 @@ Date - Data + Data apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 6 @@ -348,7 +348,7 @@ Market Price - Prezzo di mercato + Prezzo di mercato apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 26 @@ -360,7 +360,7 @@ Cancel - Annulla + Annulla apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 45 @@ -384,7 +384,7 @@ Save - Salva + Salva apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html 47 @@ -404,7 +404,7 @@ First Activity - Prima attività + Prima attività apps/client/src/app/components/admin-market-data/admin-market-data.html 60 @@ -412,7 +412,7 @@ Activity Count - Conteggio attività + Conteggio attività apps/client/src/app/components/admin-market-data/admin-market-data.html 69 @@ -424,7 +424,7 @@ Historical Data - Dati storici + Dati storici apps/client/src/app/components/admin-market-data/admin-market-data.html 78 @@ -432,7 +432,7 @@ Gather Data - Raccogli i dati + Raccogli i dati apps/client/src/app/components/admin-market-data/admin-market-data.html 119 @@ -440,7 +440,7 @@ Please add a currency: - Aggiungi una valuta: + Aggiungi una valuta: apps/client/src/app/components/admin-overview/admin-overview.component.ts 106 @@ -448,7 +448,7 @@ Do you really want to delete this coupon? - Vuoi davvero eliminare questo buono? + Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts 120 @@ -456,7 +456,7 @@ Do you really want to delete this currency? - Vuoi davvero eliminare questa valuta? + Vuoi davvero eliminare questa valuta? apps/client/src/app/components/admin-overview/admin-overview.component.ts 133 @@ -464,7 +464,7 @@ Do you really want to flush the cache? - Vuoi davvero svuotare la cache? + Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts 150 @@ -472,7 +472,7 @@ Please set your system message: - Imposta il messaggio di sistema: + Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts 199 @@ -480,7 +480,7 @@ User Count - Numero di utenti + Numero di utenti apps/client/src/app/components/admin-overview/admin-overview.html 7 @@ -488,7 +488,7 @@ per User - per utente + per utente apps/client/src/app/components/admin-overview/admin-overview.html 15 @@ -496,7 +496,7 @@ Gather Recent Data - Raccogli dati recenti + Raccogli dati recenti apps/client/src/app/components/admin-overview/admin-overview.html 33 @@ -504,7 +504,7 @@ Gather All Data - Raccogli tutti i dati + Raccogli tutti i dati apps/client/src/app/components/admin-overview/admin-overview.html 46 @@ -512,7 +512,7 @@ Gather Profile Data - Raccogli i dati del profilo + Raccogli i dati del profilo apps/client/src/app/components/admin-market-data/admin-market-data.html 125 @@ -524,7 +524,7 @@ Exchange Rates - Tassi di cambio + Tassi di cambio apps/client/src/app/components/admin-overview/admin-overview.html 67 @@ -532,7 +532,7 @@ Add Currency - Aggiungi valuta + Aggiungi valuta apps/client/src/app/components/admin-overview/admin-overview.html 106 @@ -540,7 +540,7 @@ System Message - Messaggio di sistema + Messaggio di sistema apps/client/src/app/components/admin-overview/admin-overview.html 112 @@ -548,7 +548,7 @@ Set Message - Imposta messaggio + Imposta messaggio apps/client/src/app/components/admin-overview/admin-overview.html 134 @@ -556,7 +556,7 @@ Read-only Mode - Modalità di sola lettura + Modalità di sola lettura apps/client/src/app/components/admin-overview/admin-overview.html 139 @@ -564,7 +564,7 @@ Coupons - Buoni sconto + Buoni sconto apps/client/src/app/components/admin-overview/admin-overview.html 152 @@ -572,7 +572,7 @@ Add - Aggiungi + Aggiungi apps/client/src/app/components/admin-overview/admin-overview.html 183 @@ -580,7 +580,7 @@ Housekeeping - Bilancio domestico + Bilancio domestico apps/client/src/app/components/admin-overview/admin-overview.html 190 @@ -588,7 +588,7 @@ Flush Cache - Svuota la cache + Svuota la cache apps/client/src/app/components/admin-overview/admin-overview.html 194 @@ -596,7 +596,7 @@ Do you really want to delete this user? - Vuoi davvero eliminare questo utente? + Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts 59 @@ -604,7 +604,7 @@ User - Utente + Utente apps/client/src/app/components/admin-users/admin-users.html 9 @@ -616,7 +616,7 @@ Registration - Iscrizione + Iscrizione apps/client/src/app/components/admin-users/admin-users.html 11 @@ -624,7 +624,7 @@ Engagement per Day - Partecipazione giornaliera + Partecipazione giornaliera apps/client/src/app/components/admin-users/admin-users.html 20 @@ -632,7 +632,7 @@ Last Request - Ultima richiesta + Ultima richiesta apps/client/src/app/components/admin-users/admin-users.html 22 @@ -640,7 +640,7 @@ Current Market Mood - Stato d'animo attuale del mercato + Stato d'animo attuale del mercato apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html 12 @@ -648,7 +648,7 @@ Overview - Panoramica + Panoramica apps/client/src/app/components/header/header.component.html 21 @@ -660,7 +660,7 @@ Portfolio - Portafoglio + Portafoglio apps/client/src/app/components/header/header.component.html 32 @@ -676,7 +676,7 @@ Accounts - Account + Account apps/client/src/app/components/admin-users/admin-users.html 14 @@ -696,7 +696,7 @@ Admin Control - Controllo amministrativo + Controllo amministrativo apps/client/src/app/components/header/header.component.html 55 @@ -708,7 +708,7 @@ Resources - Risorse + Risorse apps/client/src/app/components/header/header.component.html 66 @@ -724,7 +724,7 @@ Pricing - Prezzi + Prezzi apps/client/src/app/components/header/header.component.html 80 @@ -740,7 +740,7 @@ About - Informazioni su + Informazioni su apps/client/src/app/components/header/header.component.html 91 @@ -752,7 +752,7 @@ Me - Io + Io apps/client/src/app/components/header/header.component.html 127 @@ -760,7 +760,7 @@ My Ghostfolio - Il mio Ghostfolio + Il mio Ghostfolio apps/client/src/app/components/header/header.component.html 183 @@ -768,7 +768,7 @@ About Ghostfolio - Informazioni su Ghostfolio + Informazioni su Ghostfolio apps/client/src/app/components/header/header.component.html 222 @@ -776,7 +776,7 @@ Features - Funzionalità + Funzionalità apps/client/src/app/components/header/header.component.html 246 @@ -784,7 +784,7 @@ Markets - Mercati + Mercati apps/client/src/app/components/header/header.component.html 280 @@ -796,7 +796,7 @@ Get Started - Iniziare + Iniziare apps/client/src/app/pages/public/public-page.html 137 @@ -804,7 +804,7 @@ Sign in - Accedi + Accedi apps/client/src/app/components/header/header.component.ts 112 @@ -816,7 +816,7 @@ Oops! Incorrect Security Token. - Ops! Token di sicurezza errato. + Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts 126 @@ -824,7 +824,7 @@ Manage Activities - Gestione delle attività + Gestione delle attività apps/client/src/app/components/home-holdings/home-holdings.html 30 @@ -836,7 +836,7 @@ Last Days - Ultimi giorni + Ultimi giorni apps/client/src/app/components/home-market/home-market.html 6 @@ -844,7 +844,7 @@ Summary - Riepilogo + Riepilogo apps/client/src/app/components/home-summary/home-summary.html 6 @@ -852,7 +852,7 @@ Security Token - Token di sicurezza + Token di sicurezza apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 10,14 @@ -864,7 +864,7 @@ or - oppure + oppure apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 20,22 @@ -880,7 +880,7 @@ Sign in with Internet Identity - Accedi con Internet Identity + Accedi con Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 30,32 @@ -888,7 +888,7 @@ Sign in with Google - Accedi con Google + Accedi con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 37,43 @@ -896,7 +896,7 @@ Stay signed in - Rimani connesso + Rimani connesso apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 46,52 @@ -904,7 +904,7 @@ Sign in - Accedi + Accedi apps/client/src/app/components/header/header.component.html 289 @@ -916,7 +916,7 @@ Time in Market - Tempo nel mercato + Tempo nel mercato apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 3 @@ -924,7 +924,7 @@ Buy - Compra + Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 12 @@ -932,7 +932,7 @@ Sell - Vendi + Vendi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 23 @@ -940,7 +940,7 @@ Investment - Investimento + Investimento apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 40 @@ -952,7 +952,7 @@ Absolute Gross Performance - Prestazioni lorde assolute + Prestazioni lorde assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 51 @@ -960,7 +960,7 @@ Gross Performance (TWR) - Prestazioni lorde (TWR) + Prestazioni lorde (TWR) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 62 @@ -968,7 +968,7 @@ Fees for - Commissioni per + Commissioni per apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 77,80 @@ -976,7 +976,7 @@ {VAR_PLURAL, plural, =1 {transaction} other {transactions}} - {VAR_PLURAL, plural, =1 {transaction} altre {transactions}} + {VAR_PLURAL, plural, =1 {transaction} altre {transactions}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 78,79 @@ -984,7 +984,7 @@ Absolute Net Performance - Prestazioni nette assolute + Prestazioni nette assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 95 @@ -992,7 +992,7 @@ Net Performance (TWR) - Prestazioni nette (TWR) + Prestazioni nette (TWR) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 106 @@ -1000,7 +1000,7 @@ Total Assets - Asset totali + Asset totali apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 122 @@ -1008,7 +1008,7 @@ Valuables - Oggetti di valore + Oggetti di valore apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 134 @@ -1016,7 +1016,7 @@ Emergency Fund - Fondo di emergenza + Fondo di emergenza apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 145 @@ -1024,7 +1024,7 @@ Buying Power - Potere d'acquisto + Potere d'acquisto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 165 @@ -1032,7 +1032,7 @@ Net Worth - Patrimonio netto + Patrimonio netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 179 @@ -1040,7 +1040,7 @@ Annualized Performance - Prestazioni annualizzate + Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 190 @@ -1048,7 +1048,7 @@ Dividend - Dividendo + Dividendo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 206 @@ -1056,7 +1056,7 @@ Please enter the amount of your emergency fund: - Inserisci l'importo del tuo fondo di emergenza: + Inserisci l'importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 52 @@ -1064,7 +1064,7 @@ Sectors - Settori + Settori apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 187 @@ -1076,7 +1076,7 @@ Countries - Paesi + Paesi apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 198 @@ -1084,7 +1084,7 @@ Tags - Tag + Tag apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 234 @@ -1096,7 +1096,7 @@ Report Data Glitch - Segnala un'anomalia dei dati + Segnala un'anomalia dei dati apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 249 @@ -1104,7 +1104,7 @@ Allocation - Allocazione + Allocazione apps/client/src/app/components/positions-table/positions-table.component.html 72 @@ -1112,7 +1112,7 @@ Performance - Prestazioni + Prestazioni apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 55 @@ -1124,7 +1124,7 @@ Show all - Mostra tutti + Mostra tutti apps/client/src/app/components/positions-table/positions-table.component.html 137 @@ -1132,7 +1132,7 @@ Today - Oggi + Oggi apps/client/src/app/components/toggle/toggle.component.ts 21 @@ -1140,7 +1140,7 @@ YTD - anno corrente + anno corrente apps/client/src/app/components/toggle/toggle.component.ts 22 @@ -1148,7 +1148,7 @@ 1Y - 1 anno + 1 anno apps/client/src/app/components/toggle/toggle.component.ts 23 @@ -1156,7 +1156,7 @@ 5Y - 5 anni + 5 anni apps/client/src/app/components/toggle/toggle.component.ts 24 @@ -1164,7 +1164,7 @@ Max - Massimo + Massimo apps/client/src/app/components/toggle/toggle.component.ts 25 @@ -1172,7 +1172,7 @@ This feature requires a subscription. - Questa funzione richiede un abbonamento. + Questa funzione richiede un abbonamento. apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1180,7 +1180,7 @@ Upgrade Plan - Piano di aggiornamento + Piano di aggiornamento apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1188,7 +1188,7 @@ Okay - Bene + Bene apps/client/src/app/core/http-response.interceptor.ts 89 @@ -1196,7 +1196,7 @@ About - Informazioni su + Informazioni su apps/client/src/app/pages/about/about-page-routing.module.ts 12 @@ -1204,7 +1204,7 @@ Privacy Policy - Informativa sulla privacy + Informativa sulla privacy apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html 4 @@ -1212,7 +1212,7 @@ Blog - Blog + Blog apps/client/src/app/pages/blog/blog-page.html 4 @@ -1220,7 +1220,7 @@ Changelog & License - Registro delle modifiche & Licenza + Registro delle modifiche & Licenza apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts 12 @@ -1228,7 +1228,7 @@ Changelog - Registro delle modifiche + Registro delle modifiche apps/client/src/app/pages/about/changelog/changelog-page.html 4 @@ -1236,7 +1236,7 @@ License - Licenza d'uso + Licenza d'uso apps/client/src/app/pages/about/changelog/changelog-page.html 15 @@ -1244,7 +1244,7 @@ Privacy Policy - Informativa sulla privacy + Informativa sulla privacy apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts 12 @@ -1252,7 +1252,7 @@ My Ghostfolio - Il mio Ghostfolio + Il mio Ghostfolio apps/client/src/app/pages/account/account-page-routing.module.ts 12 @@ -1260,7 +1260,7 @@ Please enter your coupon code: - Inserisci il tuo codice del buono: + Inserisci il tuo codice del buono: apps/client/src/app/pages/account/account-page.component.ts 225 @@ -1268,7 +1268,7 @@ Could not redeem coupon code - Impossibile riscattare il codice del buono + Impossibile riscattare il codice del buono apps/client/src/app/pages/account/account-page.component.ts 235 @@ -1276,7 +1276,7 @@ Coupon code has been redeemed - Il codice del buono è stato riscattato + Il codice del buono è stato riscattato apps/client/src/app/pages/account/account-page.component.ts 247 @@ -1284,7 +1284,7 @@ Reload - Ricarica + Ricarica apps/client/src/app/pages/account/account-page.component.ts 248 @@ -1292,7 +1292,7 @@ Do you really want to remove this sign in method? - Vuoi davvero rimuovere questo metodo di accesso? + Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/pages/account/account-page.component.ts 294 @@ -1300,7 +1300,7 @@ Account - Account + Account apps/client/src/app/pages/account/account-page.html 4 @@ -1316,7 +1316,7 @@ Membership - Iscrizione + Iscrizione apps/client/src/app/pages/account/account-page.html 15 @@ -1324,7 +1324,7 @@ Upgrade - Aggiornamento + Aggiornamento apps/client/src/app/pages/account/account-page.html 37 @@ -1332,7 +1332,7 @@ per year - per anno + per anno apps/client/src/app/pages/account/account-page.html 48 @@ -1340,7 +1340,7 @@ Try Premium - Prova Premium + Prova Premium apps/client/src/app/pages/account/account-page.html 56 @@ -1348,7 +1348,7 @@ Redeem Coupon - Riscatta il buono + Riscatta il buono apps/client/src/app/pages/account/account-page.html 68 @@ -1356,7 +1356,7 @@ Presenter View - Vista presentatore + Vista presentatore apps/client/src/app/pages/account/account-page.html 75 @@ -1364,7 +1364,7 @@ Hides sensitive values such as absolute performances and quantities. - Nasconde valori sensibili come le prestazioni e le quantità assolute. + Nasconde valori sensibili come le prestazioni e le quantità assolute. apps/client/src/app/pages/account/account-page.html 76,79 @@ -1372,7 +1372,7 @@ Base Currency - Valuta base + Valuta base apps/client/src/app/pages/account/account-page.html 94 @@ -1380,7 +1380,7 @@ Locale - Locale + Locale apps/client/src/app/pages/account/account-page.html 135 @@ -1388,7 +1388,7 @@ Date and number format - Formato data e numero + Formato data e numero apps/client/src/app/pages/account/account-page.html 137 @@ -1396,7 +1396,7 @@ View Mode - Modalità di visualizzazione + Modalità di visualizzazione apps/client/src/app/pages/account/account-page.html 160 @@ -1404,7 +1404,7 @@ Sign in with fingerprint - Accesso con impronta digitale + Accesso con impronta digitale apps/client/src/app/pages/account/account-page.html 181 @@ -1412,7 +1412,7 @@ User ID - ID utente + ID utente apps/client/src/app/pages/account/account-page.html 208 @@ -1420,7 +1420,7 @@ Granted Access - Accesso concesso + Accesso concesso apps/client/src/app/pages/account/account-page.html 217 @@ -1428,7 +1428,7 @@ Grant access - Concedi l'accesso + Concedi l'accesso apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1436,7 +1436,7 @@ Public - Pubblico + Pubblico apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -1444,7 +1444,7 @@ Accounts - Account + Account apps/client/src/app/pages/accounts/accounts-page-routing.module.ts 12 @@ -1452,7 +1452,7 @@ Update account - Aggiorna account + Aggiorna account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 2 @@ -1460,7 +1460,7 @@ Add account - Aggiungi un account + Aggiungi un account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 3 @@ -1468,7 +1468,7 @@ Cash - Contanti + Contanti apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 15 @@ -1476,7 +1476,7 @@ Securities - Titoli + Titoli apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 16 @@ -1484,7 +1484,7 @@ Currency - Valuta + Valuta apps/client/src/app/components/accounts-table/accounts-table.component.html 23 @@ -1504,7 +1504,7 @@ Cash Balance - Saldo di cassa + Saldo di cassa apps/client/src/app/components/accounts-table/accounts-table.component.html 76 @@ -1516,7 +1516,7 @@ Platform - Piattaforma + Piattaforma apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1528,7 +1528,7 @@ Account ID - ID account + ID account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 55 @@ -1536,7 +1536,7 @@ Admin Control - Controllo amministrativo + Controllo amministrativo apps/client/src/app/pages/admin/admin-page-routing.module.ts 23 @@ -1544,7 +1544,7 @@ Blog - Blog + Blog apps/client/src/app/pages/blog/blog-page-routing.module.ts 12 @@ -1552,7 +1552,7 @@ As you are already logged in, you cannot access the demo account. - Poiché hai già effettuato l’accesso, non puoi accedere all'account demo. + Poiché hai già effettuato l’accesso, non puoi accedere all'account demo. apps/client/src/app/pages/demo/demo-page.component.ts 31 @@ -1560,7 +1560,7 @@ FAQ - FAQ + FAQ apps/client/src/app/pages/faq/faq-page-routing.module.ts 12 @@ -1568,7 +1568,7 @@ Features - Funzionalità + Funzionalità apps/client/src/app/pages/features/features-page-routing.module.ts 12 @@ -1576,7 +1576,7 @@ Overview - Panoramica + Panoramica apps/client/src/app/pages/home/home-page-routing.module.ts 23 @@ -1588,7 +1588,7 @@ Markets - Mercati + Mercati apps/client/src/app/pages/markets/markets-page-routing.module.ts 12 @@ -1596,7 +1596,7 @@ Allocations - Allocazioni + Allocazioni apps/client/src/app/pages/portfolio/allocations/allocations-page-routing.module.ts 12 @@ -1604,7 +1604,7 @@ Allocations - Allocazioni + Allocazioni apps/client/src/app/pages/portfolio/allocations/allocations-page.html 4 @@ -1616,7 +1616,7 @@ By Account - Per account + Per account apps/client/src/app/pages/portfolio/allocations/allocations-page.html 33 @@ -1624,7 +1624,7 @@ By Currency - Per valuta + Per valuta apps/client/src/app/pages/portfolio/allocations/allocations-page.html 58 @@ -1632,7 +1632,7 @@ By Asset Class - Per asset class + Per asset class apps/client/src/app/pages/portfolio/allocations/allocations-page.html 86 @@ -1640,7 +1640,7 @@ By Holding - Per partecipazione + Per partecipazione apps/client/src/app/pages/portfolio/allocations/allocations-page.html 114 @@ -1648,7 +1648,7 @@ By Sector - Per settore + Per settore apps/client/src/app/pages/portfolio/allocations/allocations-page.html 142 @@ -1656,7 +1656,7 @@ By Continent - Per continente + Per continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html 171 @@ -1664,7 +1664,7 @@ By Country - Per paese + Per paese apps/client/src/app/pages/portfolio/allocations/allocations-page.html 199 @@ -1672,7 +1672,7 @@ Regions - Regioni + Regioni apps/client/src/app/pages/portfolio/allocations/allocations-page.html 230 @@ -1684,7 +1684,7 @@ Analysis - Analisi + Analisi apps/client/src/app/pages/portfolio/analysis/analysis-page-routing.module.ts 12 @@ -1692,7 +1692,7 @@ Analysis - Analisi + Analisi apps/client/src/app/pages/portfolio/analysis/analysis-page.html 2 @@ -1704,7 +1704,7 @@ Investment Timeline - Cronologia degli investimenti + Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html 105 @@ -1712,7 +1712,7 @@ Top - In alto + In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html 26 @@ -1720,7 +1720,7 @@ Bottom - In basso + In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html 62 @@ -1728,7 +1728,7 @@ FIRE - FIRE + FIRE apps/client/src/app/pages/portfolio/fire/fire-page-routing.module.ts 12 @@ -1736,7 +1736,7 @@ FIRE - FIRE + FIRE apps/client/src/app/pages/portfolio/fire/fire-page.html 4 @@ -1748,7 +1748,7 @@ Calculator - Calcolatrice + Calcolatrice apps/client/src/app/pages/portfolio/fire/fire-page.html 6 @@ -1756,7 +1756,7 @@ 4% Rule - Regola del 4% + Regola del 4% apps/client/src/app/pages/portfolio/fire/fire-page.html 20 @@ -1764,7 +1764,7 @@ Holdings - Partecipazioni + Partecipazioni apps/client/src/app/pages/portfolio/holdings/holdings-page-routing.module.ts 12 @@ -1772,7 +1772,7 @@ Holdings - Partecipazioni + Partecipazioni apps/client/src/app/pages/portfolio/holdings/holdings-page.html 4 @@ -1788,7 +1788,7 @@ Get an overview of your current holdings. - Ottieni una panoramica delle tue attuali partecipazioni. + Ottieni una panoramica delle tue attuali partecipazioni. apps/client/src/app/pages/portfolio/portfolio-page.html 7,9 @@ -1796,7 +1796,7 @@ Open Holdings - Apri le partecipazioni + Apri le partecipazioni apps/client/src/app/pages/portfolio/portfolio-page.html 16 @@ -1804,7 +1804,7 @@ Manage your activities: stocks, ETFs, cryptocurrencies, dividend, and valuables. - Gestisci le tue attività: azioni, ETF, criptovalute, dividendi e oggetti di valore. + Gestisci le tue attività: azioni, ETF, criptovalute, dividendi e oggetti di valore. apps/client/src/app/pages/portfolio/portfolio-page.html 25,28 @@ -1812,7 +1812,7 @@ Open Activities - Apri le attività + Apri le attività apps/client/src/app/pages/portfolio/portfolio-page.html 35 @@ -1820,7 +1820,7 @@ Check the allocations of your portfolio by account, asset class, currency, sector and region. - Controlla le allocazioni del tuo portafoglio per account, asset class, valuta, settore e regione. + Controlla le allocazioni del tuo portafoglio per account, asset class, valuta, settore e regione. apps/client/src/app/pages/portfolio/portfolio-page.html 50,53 @@ -1828,7 +1828,7 @@ Open Allocations - Apri le allocazioni + Apri le allocazioni apps/client/src/app/pages/portfolio/portfolio-page.html 60 @@ -1836,7 +1836,7 @@ Ghostfolio Analysis visualizes your portfolio and shows your top and bottom performers. - Ghostfolio Analysis visualizza il tuo portafoglio e mostra i tuoi migliori e peggiori risultati. + Ghostfolio Analysis visualizza il tuo portafoglio e mostra i tuoi migliori e peggiori risultati. apps/client/src/app/pages/portfolio/portfolio-page.html 75,78 @@ -1844,7 +1844,7 @@ Open Analysis - Apri le analisi + Apri le analisi apps/client/src/app/pages/portfolio/portfolio-page.html 85 @@ -1852,7 +1852,7 @@ Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. - Ghostfolio X-ray utilizza l'analisi statica per identificare potenziali problemi e rischi nel tuo portafoglio. + Ghostfolio X-ray utilizza l'analisi statica per identificare potenziali problemi e rischi nel tuo portafoglio. apps/client/src/app/pages/portfolio/portfolio-page.html 100,103 @@ -1860,7 +1860,7 @@ Open X-ray - Apri X-ray + Apri X-ray apps/client/src/app/pages/portfolio/portfolio-page.html 106 @@ -1868,7 +1868,7 @@ Ghostfolio FIRE calculates metrics for the Financial Independence, Retire Early lifestyle. - Ghostfolio FIRE calcola le metriche per l’Indipendenza finanziaria, il pensionamento anticipato. + Ghostfolio FIRE calcola le metriche per l’Indipendenza finanziaria, il pensionamento anticipato. apps/client/src/app/pages/portfolio/portfolio-page.html 121,124 @@ -1876,7 +1876,7 @@ Open FIRE - Apri FIRE + Apri FIRE apps/client/src/app/pages/portfolio/portfolio-page.html 127 @@ -1884,7 +1884,7 @@ Update activity - Aggiorna l'attività + Aggiorna l'attività apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 7,8 @@ -1892,7 +1892,7 @@ Add activity - Aggiungi un'attività + Aggiungi un'attività apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 8,11 @@ -1900,7 +1900,7 @@ BUY - ACQUISTO + ACQUISTO apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 14,15 @@ -1908,7 +1908,7 @@ DIVIDEND - DIVIDENDO + DIVIDENDO apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 15,17 @@ -1916,7 +1916,7 @@ ITEM - ARTICOLO + ARTICOLO apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 16,18 @@ -1924,7 +1924,7 @@ SELL - VENDITA + VENDITA apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 17,21 @@ -1932,7 +1932,7 @@ Name, symbol or ISIN - Nome, simbolo o ISIN + Nome, simbolo o ISIN apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 37,40 @@ -1940,7 +1940,7 @@ Quantity - Quantità + Quantità apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 107 @@ -1956,7 +1956,7 @@ Unit Price - Prezzo unitario + Prezzo unitario apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 112,113 @@ -1968,7 +1968,7 @@ Fee - Commissione + Commissione apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 131,132 @@ -1980,7 +1980,7 @@ Note - Nota + Nota apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 140,143 @@ -1988,7 +1988,7 @@ Asset Class - Asset class + Asset class apps/client/src/app/components/admin-market-data/admin-market-data.html 42 @@ -2004,7 +2004,7 @@ Activities - Attività + Attività apps/client/src/app/pages/portfolio/transactions/transactions-page-routing.module.ts 12 @@ -2012,7 +2012,7 @@ Importing data... - Importazione dei dati... + Importazione dei dati... apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts 191 @@ -2020,7 +2020,7 @@ Import has been completed - L'importazione è stata completata + L'importazione è stata completata apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts 337 @@ -2028,7 +2028,7 @@ Pricing - Prezzi + Prezzi apps/client/src/app/pages/pricing/pricing-page-routing.module.ts 12 @@ -2036,7 +2036,7 @@ Portfolio - Portafoglio + Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 111 @@ -2048,7 +2048,7 @@ Currencies - Valute + Valute apps/client/src/app/pages/public/public-page.html 30 @@ -2056,7 +2056,7 @@ Continents - Continenti + Continenti apps/client/src/app/pages/public/public-page.html 60 @@ -2064,7 +2064,7 @@ Ghostfolio empowers you to keep track of your wealth. - Ghostfolio ti permette di tenere traccia della tua ricchezza. + Ghostfolio ti permette di tenere traccia della tua ricchezza. apps/client/src/app/pages/public/public-page.html 132,134 @@ -2072,7 +2072,7 @@ Registration - Iscrizione + Iscrizione apps/client/src/app/pages/register/register-page-routing.module.ts 12 @@ -2080,7 +2080,7 @@ Continue with Internet Identity - Continua con Internet Identity + Continua con Internet Identity apps/client/src/app/pages/register/register-page.html 41,43 @@ -2088,7 +2088,7 @@ Continue with Google - Continua con Google + Continua con Google apps/client/src/app/pages/register/register-page.html 48,53 @@ -2096,7 +2096,7 @@ Copy to clipboard - Copia negli appunti + Copia negli appunti apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 26 @@ -2104,7 +2104,7 @@ I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. - Accetto di aver memorizzato il mio Token di sicurezza sopra citato in un luogo sicuro. Se lo perdo, non posso recuperare il mio account. + Accetto di aver memorizzato il mio Token di sicurezza sopra citato in un luogo sicuro. Se lo perdo, non posso recuperare il mio account. apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 31,34 @@ -2112,7 +2112,7 @@ Agree and continue - Accetta e continua + Accetta e continua apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 44 @@ -2120,7 +2120,7 @@ Resources - Risorse + Risorse apps/client/src/app/pages/resources/resources-page-routing.module.ts 12 @@ -2128,7 +2128,7 @@ Oops, authentication has failed. - Ops, l'autenticazione non è riuscita. + Ops, l'autenticazione non è riuscita. apps/client/src/app/pages/webauthn/webauthn-page.html 18 @@ -2136,7 +2136,7 @@ Try again - Riprova + Riprova apps/client/src/app/pages/webauthn/webauthn-page.html 26 @@ -2144,7 +2144,7 @@ Go back to Home Page - Torna alla pagina iniziale + Torna alla pagina iniziale apps/client/src/app/pages/webauthn/webauthn-page.html 30 @@ -2152,7 +2152,7 @@ Draft - Bozza + Bozza libs/ui/src/lib/activities-table/activities-table.component.html 95 @@ -2160,7 +2160,7 @@ Import Activities - Importa le attività + Importa le attività libs/ui/src/lib/activities-table/activities-table.component.html 319 @@ -2168,7 +2168,7 @@ Export Activities - Esporta le attività + Esporta le attività libs/ui/src/lib/activities-table/activities-table.component.html 329 @@ -2176,7 +2176,7 @@ Export Drafts as ICS - Esporta le bozze come ICS + Esporta le bozze come ICS libs/ui/src/lib/activities-table/activities-table.component.html 339 @@ -2184,7 +2184,7 @@ Clone - Clona + Clona libs/ui/src/lib/activities-table/activities-table.component.html 369 @@ -2192,7 +2192,7 @@ Export Draft as ICS - Esporta la bozza come ICS + Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html 377 @@ -2200,7 +2200,7 @@ Do you really want to delete this activity? - Vuoi davvero eliminare questa attività? + Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts 134 @@ -2208,7 +2208,7 @@ Index - Indice + Indice libs/ui/src/lib/benchmark/benchmark.component.html 3 @@ -2216,7 +2216,7 @@ Change from All Time High - Variazione rispetto al massimo storico (ATH) + Variazione rispetto al massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html 12 @@ -2224,7 +2224,7 @@ from ATH - dal massimo storico (ATH) + dal massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html 14 @@ -2232,7 +2232,7 @@ Savings Rate - Tasso di risparmio + Tasso di risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.html 10 @@ -2240,7 +2240,7 @@ per month - al mese + al mese libs/ui/src/lib/fire-calculator/fire-calculator.component.html 17 @@ -2248,7 +2248,7 @@ Investment Horizon - Orizzonte di investimento + Orizzonte di investimento libs/ui/src/lib/fire-calculator/fire-calculator.component.html 21 @@ -2256,7 +2256,7 @@ years - anni + anni libs/ui/src/lib/fire-calculator/fire-calculator.component.html 23 @@ -2264,7 +2264,7 @@ Annual Interest Rate - Tasso di interesse annuo + Tasso di interesse annuo libs/ui/src/lib/fire-calculator/fire-calculator.component.html 27 @@ -2272,7 +2272,7 @@ Beta - Beta + Beta apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 5 @@ -2284,7 +2284,7 @@ Time to add your first activity. - È il momento di aggiungere la tua prima attività. + È il momento di aggiungere la tua prima attività. libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html 12 @@ -2292,7 +2292,7 @@ Language - Lingua + Lingua apps/client/src/app/pages/account/account-page.html 115 @@ -2300,7 +2300,7 @@ Data Management - Gestione dei dati + Gestione dei dati apps/client/src/app/components/admin-overview/admin-overview.html 20 @@ -2308,7 +2308,7 @@ Get started - Inizia + Inizia apps/client/src/app/components/header/header.component.html 297 @@ -2316,7 +2316,7 @@ This feature is currently unavailable. - Questa funzionalità non è attualmente disponibile. + Questa funzionalità non è attualmente disponibile. apps/client/src/app/core/http-response.interceptor.ts 59 @@ -2324,7 +2324,7 @@ Oops! Something went wrong. - Ops! Qualcosa è andato storto. + Ops! Qualcosa è andato storto. apps/client/src/app/core/http-response.interceptor.ts 86 @@ -2332,7 +2332,7 @@ Please try again later. - Riprova più tardi. + Riprova più tardi. apps/client/src/app/core/http-response.interceptor.ts 61 @@ -2344,7 +2344,7 @@ Change - Modifica + Modifica apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 44 @@ -2352,7 +2352,7 @@ Developed Markets - Mercati sviluppati + Mercati sviluppati apps/client/src/app/pages/portfolio/allocations/allocations-page.html 256 @@ -2364,7 +2364,7 @@ Asset Sub Class - Sub-asset class + Sub-asset class apps/client/src/app/components/admin-market-data/admin-market-data.html 51 @@ -2380,7 +2380,7 @@ Average Unit Price - Prezzo unitario medio + Prezzo unitario medio apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 65 @@ -2388,7 +2388,7 @@ Maximum Price - Prezzo massimo + Prezzo massimo apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 97 @@ -2396,7 +2396,7 @@ Other Markets - Altri mercati + Altri mercati apps/client/src/app/pages/portfolio/allocations/allocations-page.html 274 @@ -2408,7 +2408,7 @@ Emerging Markets - Mercati emergenti + Mercati emergenti apps/client/src/app/pages/portfolio/allocations/allocations-page.html 265 @@ -2420,7 +2420,7 @@ Sector - Settore + Settore apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 169 @@ -2428,7 +2428,7 @@ Country - Paese + Paese apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 181 @@ -2436,7 +2436,7 @@ Minimum Price - Prezzo minimo + Prezzo minimo apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 86 @@ -2444,7 +2444,7 @@ First Buy Date - Data del primo acquisto + Data del primo acquisto apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 127 @@ -2452,7 +2452,7 @@ Transactions - Transazioni + Transazioni apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 136 @@ -2460,7 +2460,7 @@ Projected Total Amount - Importo totale previsto + Importo totale previsto libs/ui/src/lib/fire-calculator/fire-calculator.component.html 44 @@ -2468,7 +2468,7 @@ Savings - Risparmio + Risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.ts 296 @@ -2476,7 +2476,7 @@ Accumulating - Accumulo + Accumulo apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 39 @@ -2484,7 +2484,7 @@ Initial - Iniziale + Iniziale apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts 57 @@ -2492,7 +2492,7 @@ Interest - Interesse + Interesse libs/ui/src/lib/fire-calculator/fire-calculator.component.ts 286 @@ -2500,7 +2500,7 @@ Deposit - Deposito + Deposito apps/client/src/app/components/investment-chart/investment-chart.component.ts 132 @@ -2512,7 +2512,7 @@ Current - Attuale + Attuale apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts 58 @@ -2520,7 +2520,7 @@ Monthly - Mensile + Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 38 @@ -2528,7 +2528,7 @@ Sectors Count - Numero di settori + Numero di settori apps/client/src/app/components/admin-market-data/admin-market-data.html 96 @@ -2536,7 +2536,7 @@ Countries Count - Numero di paesi + Numero di paesi apps/client/src/app/components/admin-market-data/admin-market-data.html 87 @@ -2544,7 +2544,7 @@ Fear - Paura + Paura apps/client/src/app/components/home-market/home-market.component.ts 24 @@ -2552,7 +2552,7 @@ Greed - Avidità + Avidità apps/client/src/app/components/home-market/home-market.component.ts 25 @@ -2560,7 +2560,7 @@ Filter by account or tag... - Filtra per account o tag... + Filtra per account o tag... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts 136 @@ -2572,7 +2572,7 @@ Filter by... - Filtra per... + Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 128 @@ -2580,7 +2580,7 @@ Filter by account, currency, symbol or type... - Filtra per account, valuta, simbolo o tipo... + Filtra per account, valuta, simbolo o tipo... libs/ui/src/lib/activities-table/activities-table.component.ts 291 @@ -2588,7 +2588,7 @@ Hello, has shared a Portfolio with you! - Salve, ha condiviso un Portafoglio con te! + Salve, ha condiviso un Portafoglio con te! apps/client/src/app/pages/public/public-page.html 4,7 @@ -2596,7 +2596,7 @@ Alias - Alias + Alias apps/client/src/app/components/access-table/access-table.component.html 3 @@ -2608,7 +2608,7 @@ Experimental Features - Funzionalità sperimentali + Funzionalità sperimentali apps/client/src/app/pages/account/account-page.html 196 @@ -2616,7 +2616,7 @@ Benchmark - Benchmark + Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 120 @@ -2624,7 +2624,7 @@ Benchmarks - Benchmark + Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 4 @@ -2632,7 +2632,7 @@ Compare with... - Confronta con... + Confronta con... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 14 @@ -2640,7 +2640,7 @@ Proportion of Net Worth - Percentuale del patrimonio netto + Percentuale del patrimonio netto apps/client/src/app/pages/portfolio/allocations/allocations-page.html 17 diff --git a/package.json b/package.json index d57ea3d87..5dde2d031 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.195.0", + "version": "1.196.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From dacd7271eb71a3e5b288f9ae44347ae1b1bbf54a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 24 Sep 2022 09:58:09 +0200 Subject: [PATCH 05/29] Feature/improve density of various selectors (#1283) * Improve density * Update changelog --- CHANGELOG.md | 6 +++ .../app/components/admin-jobs/admin-jobs.html | 7 ++- .../admin-overview/admin-overview.html | 8 ++- .../benchmark-comparator.component.html | 8 ++- .../src/app/pages/account/account-page.html | 20 ++++++-- apps/client/src/styles.scss | 50 ++++++++++++++++--- 6 files changed, 82 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a7960187..cec938460 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the style of various selectors (density) + ## 1.196.0 - 22.09.2022 ### Added diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.html b/apps/client/src/app/components/admin-jobs/admin-jobs.html index 74ece2ade..49de5decc 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.html +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -2,7 +2,10 @@
- +
- - + +
- + Compare with...
-
+
Base Currency
- + Beta
- +
- +
- + Date: Sat, 24 Sep 2022 12:29:36 +0200 Subject: [PATCH 06/29] Feature/add multi language support to feature overview (#1284) * Add multi-language support * Update changelog --- CHANGELOG.md | 4 ++++ apps/client/src/app/pages/features/features-page.html | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cec938460..fc24feac1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Extended the feature overview page by multi-language support (English, German, Italian) + ### Changed - Improved the style of various selectors (density) diff --git a/apps/client/src/app/pages/features/features-page.html b/apps/client/src/app/pages/features/features-page.html index 691b63127..d1a57f6b3 100644 --- a/apps/client/src/app/pages/features/features-page.html +++ b/apps/client/src/app/pages/features/features-page.html @@ -192,6 +192,17 @@
+
+ +
+

Multi-Language

+

+ Use Ghostfolio in multiple languages: English, German and + Italian are currently supported. +

+
+
+
From 7667af059c92aed569534267e4eb89c9bfb45e8d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 24 Sep 2022 13:12:40 +0200 Subject: [PATCH 07/29] Feature/combine performance and chart calculation (#1285) * Combine performance and chart calculation endpoints * Update changelog --- CHANGELOG.md | 1 + .../src/app/benchmark/benchmark.service.ts | 25 ++-- .../src/app/portfolio/portfolio-calculator.ts | 29 ++--- .../src/app/portfolio/portfolio.controller.ts | 49 +++++--- .../src/app/portfolio/portfolio.service.ts | 114 +++++++++++++++++- .../home-overview/home-overview.component.ts | 51 +++++--- .../analysis/analysis-page.component.ts | 5 +- apps/client/src/app/services/data.service.ts | 14 ++- .../historical-data-item.interface.ts | 2 + ...ortfolio-performance-response.interface.ts | 2 + .../lib/line-chart/line-chart.component.ts | 2 +- 11 files changed, 216 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc24feac1..755528274 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Combined the performance and chart calculation - Improved the style of various selectors (density) ## 1.196.0 - 22.09.2022 diff --git a/apps/api/src/app/benchmark/benchmark.service.ts b/apps/api/src/app/benchmark/benchmark.service.ts index 9c60757f5..68968b09f 100644 --- a/apps/api/src/app/benchmark/benchmark.service.ts +++ b/apps/api/src/app/benchmark/benchmark.service.ts @@ -164,7 +164,7 @@ export class BenchmarkService { ); const marketPriceAtStartDate = marketDataItems?.[0]?.marketPrice ?? 0; - return { + const response = { marketData: [ ...marketDataItems .filter((marketDataItem, index) => { @@ -181,17 +181,22 @@ export class BenchmarkService { marketDataItem.marketPrice ) * 100 }; - }), - { - date: format(new Date(), DATE_FORMAT), - value: - this.calculateChangeInPercentage( - marketPriceAtStartDate, - currentSymbolItem.marketPrice - ) * 100 - } + }) ] }; + + if (currentSymbolItem?.marketPrice) { + response.marketData.push({ + date: format(new Date(), DATE_FORMAT), + value: + this.calculateChangeInPercentage( + marketPriceAtStartDate, + currentSymbolItem.marketPrice + ) * 100 + }); + } + + return response; } private getMarketCondition(aPerformanceInPercent: number) { diff --git a/apps/api/src/app/portfolio/portfolio-calculator.ts b/apps/api/src/app/portfolio/portfolio-calculator.ts index 44046a60f..46fe092bb 100644 --- a/apps/api/src/app/portfolio/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/portfolio-calculator.ts @@ -272,23 +272,20 @@ export class PortfolioCalculator { } } - const isInPercentage = true; - return Object.keys(totalNetPerformanceValues).map((date) => { - return isInPercentage - ? { - date, - value: totalInvestmentValues[date].eq(0) - ? 0 - : totalNetPerformanceValues[date] - .div(totalInvestmentValues[date]) - .mul(100) - .toNumber() - } - : { - date, - value: totalNetPerformanceValues[date].toNumber() - }; + const netPerformanceInPercentage = totalInvestmentValues[date].eq(0) + ? 0 + : totalNetPerformanceValues[date] + .div(totalInvestmentValues[date]) + .mul(100) + .toNumber(); + + return { + date, + netPerformanceInPercentage, + netPerformance: totalNetPerformanceValues[date].toNumber(), + value: netPerformanceInPercentage + }; }); } diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 86bc8c2fa..66cd408cc 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -110,26 +110,6 @@ export class PortfolioController { }; } - @Get('chart') - @UseGuards(AuthGuard('jwt')) - @Version('2') - public async getChartV2( - @Headers('impersonation-id') impersonationId: string, - @Query('range') range - ): Promise { - const historicalDataContainer = await this.portfolioService.getChartV2( - impersonationId, - range - ); - - return { - chart: historicalDataContainer.items, - hasError: false, - isAllTimeHigh: false, - isAllTimeLow: false - }; - } - @Get('details') @UseGuards(AuthGuard('jwt')) @UseInterceptors(RedactValuesInResponseInterceptor) @@ -319,6 +299,35 @@ export class PortfolioController { return performanceInformation; } + @Get('performance') + @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInResponseInterceptor) + @Version('2') + public async getPerformanceV2( + @Headers('impersonation-id') impersonationId: string, + @Query('range') dateRange + ): Promise { + const performanceInformation = await this.portfolioService.getPerformanceV2( + { + dateRange, + impersonationId + } + ); + + if ( + impersonationId || + this.request.user.Settings.settings.viewMode === 'ZEN' || + this.userService.isRestrictedView(this.request.user) + ) { + performanceInformation.performance = nullifyValuesInObject( + performanceInformation.performance, + ['currentGrossPerformance', 'currentNetPerformance', 'currentValue'] + ); + } + + return performanceInformation; + } + @Get('positions') @UseGuards(AuthGuard('jwt')) @UseInterceptors(TransformDataSourceInResponseInterceptor) diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 36b7bd48e..c38e2a8d0 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -355,11 +355,14 @@ export class PortfolioService { }; } - public async getChartV2( - aImpersonationId: string, - aDateRange: DateRange = 'max' - ): Promise { - const userId = await this.getUserId(aImpersonationId, this.request.user.id); + public async getChartV2({ + dateRange = 'max', + impersonationId + }: { + dateRange?: DateRange; + impersonationId: string; + }): Promise { + const userId = await this.getUserId(impersonationId, this.request.user.id); const { portfolioOrders, transactionPoints } = await this.getTransactionPoints({ @@ -383,7 +386,7 @@ export class PortfolioService { const endDate = new Date(); const portfolioStart = parseDate(transactionPoints[0].date); - const startDate = this.getStartDate(aDateRange, portfolioStart); + const startDate = this.getStartDate(dateRange, portfolioStart); const daysInMarket = differenceInDays(new Date(), startDate); const step = Math.round( @@ -987,6 +990,105 @@ export class PortfolioService { }; } + public async getPerformanceV2({ + dateRange = 'max', + impersonationId + }: { + dateRange?: DateRange; + impersonationId: string; + }): Promise { + const userId = await this.getUserId(impersonationId, this.request.user.id); + + const { portfolioOrders, transactionPoints } = + await this.getTransactionPoints({ + userId + }); + + const portfolioCalculator = new PortfolioCalculator({ + currency: this.request.user.Settings.settings.baseCurrency, + currentRateService: this.currentRateService, + orders: portfolioOrders + }); + + if (transactionPoints?.length <= 0) { + return { + chart: [], + hasErrors: false, + performance: { + currentGrossPerformance: 0, + currentGrossPerformancePercent: 0, + currentNetPerformance: 0, + currentNetPerformancePercent: 0, + currentValue: 0 + } + }; + } + + portfolioCalculator.setTransactionPoints(transactionPoints); + + const portfolioStart = parseDate(transactionPoints[0].date); + const startDate = this.getStartDate(dateRange, portfolioStart); + const currentPositions = await portfolioCalculator.getCurrentPositions( + startDate + ); + + const hasErrors = currentPositions.hasErrors; + const currentValue = currentPositions.currentValue.toNumber(); + const currentGrossPerformance = currentPositions.grossPerformance; + const currentGrossPerformancePercent = + currentPositions.grossPerformancePercentage; + let currentNetPerformance = currentPositions.netPerformance; + let currentNetPerformancePercent = + currentPositions.netPerformancePercentage; + + // if (currentGrossPerformance.mul(currentGrossPerformancePercent).lt(0)) { + // // If algebraic sign is different, harmonize it + // currentGrossPerformancePercent = currentGrossPerformancePercent.mul(-1); + // } + + // if (currentNetPerformance.mul(currentNetPerformancePercent).lt(0)) { + // // If algebraic sign is different, harmonize it + // currentNetPerformancePercent = currentNetPerformancePercent.mul(-1); + // } + + const historicalDataContainer = await this.getChartV2({ + dateRange, + impersonationId + }); + + const itemOfToday = historicalDataContainer.items.find((item) => { + return item.date === format(new Date(), DATE_FORMAT); + }); + + if (itemOfToday) { + currentNetPerformance = new Big(itemOfToday.netPerformance); + currentNetPerformancePercent = new Big( + itemOfToday.netPerformanceInPercentage + ).div(100); + } + + return { + chart: historicalDataContainer.items.map( + ({ date, netPerformanceInPercentage }) => { + return { + date, + value: netPerformanceInPercentage + }; + } + ), + errors: currentPositions.errors, + hasErrors: currentPositions.hasErrors || hasErrors, + performance: { + currentValue, + currentGrossPerformance: currentGrossPerformance.toNumber(), + currentGrossPerformancePercent: + currentGrossPerformancePercent.toNumber(), + currentNetPerformance: currentNetPerformance.toNumber(), + currentNetPerformancePercent: currentNetPerformancePercent.toNumber() + } + }; + } + public async getReport(impersonationId: string): Promise { const currency = this.request.user.Settings.settings.baseCurrency; const userId = await this.getUserId(impersonationId, this.request.user.id); diff --git a/apps/client/src/app/components/home-overview/home-overview.component.ts b/apps/client/src/app/components/home-overview/home-overview.component.ts index c03110d75..9c35fe8c5 100644 --- a/apps/client/src/app/components/home-overview/home-overview.component.ts +++ b/apps/client/src/app/components/home-overview/home-overview.component.ts @@ -76,8 +76,6 @@ export class HomeOverviewComponent implements OnDestroy, OnInit { !this.hasImpersonationId && !this.user.settings.isRestrictedView && this.user.settings.viewMode !== 'ZEN'; - - this.update(); } public onChangeDateRange(dateRange: DateRange) { @@ -104,36 +102,51 @@ export class HomeOverviewComponent implements OnDestroy, OnInit { } private update() { + this.historicalDataItems = null; this.isLoadingPerformance = true; this.dataService - .fetchChart({ + .fetchPortfolioPerformance({ range: this.user?.settings?.dateRange, version: this.user?.settings?.isExperimentalFeatures ? 2 : 1 }) .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe((chartData) => { - this.historicalDataItems = chartData.chart.map((chartDataItem) => { - return { - date: chartDataItem.date, - value: chartDataItem.value - }; - }); - this.isAllTimeHigh = chartData.isAllTimeHigh; - this.isAllTimeLow = chartData.isAllTimeLow; - - this.changeDetectorRef.markForCheck(); - }); - - this.dataService - .fetchPortfolioPerformance({ range: this.user?.settings?.dateRange }) - .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((response) => { this.errors = response.errors; this.hasError = response.hasErrors; this.performance = response.performance; this.isLoadingPerformance = false; + if (this.user?.settings?.isExperimentalFeatures) { + this.historicalDataItems = response.chart.map(({ date, value }) => { + return { + date, + value + }; + }); + } else { + this.dataService + .fetchChart({ + range: this.user?.settings?.dateRange, + version: 1 + }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((chartData) => { + this.historicalDataItems = chartData.chart.map( + ({ date, value }) => { + return { + date, + value + }; + } + ); + this.isAllTimeHigh = chartData.isAllTimeHigh; + this.isAllTimeLow = chartData.isAllTimeLow; + + this.changeDetectorRef.markForCheck(); + }); + } + this.changeDetectorRef.markForCheck(); }); diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts index 775b32981..69bc9dc87 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -126,7 +126,10 @@ export class AnalysisPageComponent implements OnDestroy, OnInit { this.isLoadingBenchmarkComparator = true; this.dataService - .fetchChart({ range: this.user?.settings?.dateRange, version: 2 }) + .fetchPortfolioPerformance({ + range: this.user?.settings?.dateRange, + version: 2 + }) .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(({ chart }) => { this.firstOrderDate = new Date(chart?.[0]?.date ?? new Date()); diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 49d7b1761..d33faeb74 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -353,12 +353,16 @@ export class DataService { }); } - public fetchPortfolioPerformance(params: { [param: string]: any }) { + public fetchPortfolioPerformance({ + range, + version + }: { + range: DateRange; + version: number; + }) { return this.http.get( - '/api/v1/portfolio/performance', - { - params - } + `/api/v${version}/portfolio/performance`, + { params: { range } } ); } diff --git a/libs/common/src/lib/interfaces/historical-data-item.interface.ts b/libs/common/src/lib/interfaces/historical-data-item.interface.ts index 3bb98fdbe..324957838 100644 --- a/libs/common/src/lib/interfaces/historical-data-item.interface.ts +++ b/libs/common/src/lib/interfaces/historical-data-item.interface.ts @@ -2,5 +2,7 @@ export interface HistoricalDataItem { averagePrice?: number; date: string; grossPerformancePercent?: number; + netPerformance?: number; + netPerformanceInPercentage?: number; value: number; } diff --git a/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts index 3db6d3af4..74e7801cd 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts @@ -1,6 +1,8 @@ +import { HistoricalDataItem } from '../historical-data-item.interface'; import { PortfolioPerformance } from '../portfolio-performance.interface'; import { ResponseError } from './errors.interface'; export interface PortfolioPerformanceResponse extends ResponseError { + chart?: HistoricalDataItem[]; performance: PortfolioPerformance; } diff --git a/libs/ui/src/lib/line-chart/line-chart.component.ts b/libs/ui/src/lib/line-chart/line-chart.component.ts index 4f5d0571b..7c0318d3e 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -93,7 +93,7 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy { } public ngOnChanges() { - if (this.historicalDataItems) { + if (this.historicalDataItems || this.historicalDataItems === null) { setTimeout(() => { // Wait for the chartCanvas this.initialize(); From f3d337b044d142a042bcaf75f89f42541cf150ff Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 24 Sep 2022 13:15:16 +0200 Subject: [PATCH 08/29] Feature/add value of active filters on allocations page (#1286) * Add value * Update changelog --- CHANGELOG.md | 1 + .../portfolio/allocations/allocations-page.html | 12 ++++++++++-- .../portfolio/allocations/allocations-page.scss | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 755528274..c101591e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added the value of the active filter in percentage on the allocations page - Extended the feature overview page by multi-language support (English, German, Italian) ### Changed diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html index 4a030c8a0..36e98011c 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html @@ -13,8 +13,16 @@
- - Proportion of Net Worth + + Proportion of Net Worth + Date: Sat, 24 Sep 2022 13:16:47 +0200 Subject: [PATCH 09/29] Release 1.197.0 (#1287) --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c101591e3..20277377b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.197.0 - 24.09.2022 ### Added diff --git a/package.json b/package.json index 5dde2d031..a11af30b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.196.0", + "version": "1.197.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From 72974e888f3403ab4bc3e6f3bbb14a46a9fced94 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:14:51 +0200 Subject: [PATCH 10/29] Clean up spaces (#1288) --- .../20210605161257_added_symbol_profile/migration.sql | 2 +- .../migrations/20210612110542_added_auth_device/migration.sql | 2 +- .../migration.sql | 2 +- .../20210703194509_added_balance_to_account/migration.sql | 4 ++-- .../migration.sql | 2 +- .../20210807062952_added_is_draft_to_order/migration.sql | 2 +- .../migration.sql | 2 +- .../20210815180121_added_settings_to_settings/migration.sql | 2 +- .../migration.sql | 2 +- .../migration.sql | 2 +- .../migration.sql | 2 +- .../migration.sql | 2 +- .../20220227093650_added_url_to_symbol_profile/migration.sql | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/prisma/migrations/20210605161257_added_symbol_profile/migration.sql b/prisma/migrations/20210605161257_added_symbol_profile/migration.sql index 07c3f5ce0..b1fe9aa42 100644 --- a/prisma/migrations/20210605161257_added_symbol_profile/migration.sql +++ b/prisma/migrations/20210605161257_added_symbol_profile/migration.sql @@ -1,5 +1,5 @@ -- AlterTable -ALTER TABLE "Order" ADD COLUMN "symbolProfileId" TEXT; +ALTER TABLE "Order" ADD COLUMN "symbolProfileId" TEXT; -- CreateTable CREATE TABLE "SymbolProfile" ( diff --git a/prisma/migrations/20210612110542_added_auth_device/migration.sql b/prisma/migrations/20210612110542_added_auth_device/migration.sql index 28d8d7c25..8d8675436 100644 --- a/prisma/migrations/20210612110542_added_auth_device/migration.sql +++ b/prisma/migrations/20210612110542_added_auth_device/migration.sql @@ -1,5 +1,5 @@ -- AlterTable -ALTER TABLE "User" ADD COLUMN "authChallenge" TEXT; +ALTER TABLE "User" ADD COLUMN "authChallenge" TEXT; -- CreateTable CREATE TABLE "AuthDevice" ( diff --git a/prisma/migrations/20210616075245_added_sectors_to_symbol_profile/migration.sql b/prisma/migrations/20210616075245_added_sectors_to_symbol_profile/migration.sql index 39b7baba7..96621b085 100644 --- a/prisma/migrations/20210616075245_added_sectors_to_symbol_profile/migration.sql +++ b/prisma/migrations/20210616075245_added_sectors_to_symbol_profile/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "sectors" JSONB; +ALTER TABLE "SymbolProfile" ADD COLUMN "sectors" JSONB; diff --git a/prisma/migrations/20210703194509_added_balance_to_account/migration.sql b/prisma/migrations/20210703194509_added_balance_to_account/migration.sql index 8c3952035..d9a9ffd1c 100644 --- a/prisma/migrations/20210703194509_added_balance_to_account/migration.sql +++ b/prisma/migrations/20210703194509_added_balance_to_account/migration.sql @@ -2,5 +2,5 @@ ALTER TYPE "AccountType" ADD VALUE 'CASH'; -- AlterTable -ALTER TABLE "Account" ADD COLUMN "balance" DOUBLE PRECISION NOT NULL DEFAULT 0, -ADD COLUMN "currency" "Currency" NOT NULL DEFAULT E'USD'; +ALTER TABLE "Account" ADD COLUMN "balance" DOUBLE PRECISION NOT NULL DEFAULT 0, +ADD COLUMN "currency" "Currency" NOT NULL DEFAULT E'USD'; diff --git a/prisma/migrations/20210724160404_added_currency_to_symbol_profile/migration.sql b/prisma/migrations/20210724160404_added_currency_to_symbol_profile/migration.sql index a99c3c1d9..eab96d9fc 100644 --- a/prisma/migrations/20210724160404_added_currency_to_symbol_profile/migration.sql +++ b/prisma/migrations/20210724160404_added_currency_to_symbol_profile/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "currency" "Currency"; +ALTER TABLE "SymbolProfile" ADD COLUMN "currency" "Currency"; diff --git a/prisma/migrations/20210807062952_added_is_draft_to_order/migration.sql b/prisma/migrations/20210807062952_added_is_draft_to_order/migration.sql index 51970ec3c..d63f8679d 100644 --- a/prisma/migrations/20210807062952_added_is_draft_to_order/migration.sql +++ b/prisma/migrations/20210807062952_added_is_draft_to_order/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "Order" ADD COLUMN "isDraft" BOOLEAN NOT NULL DEFAULT false; +ALTER TABLE "Order" ADD COLUMN "isDraft" BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/migrations/20210808075949_added_asset_class_to_symbol_profile/migration.sql b/prisma/migrations/20210808075949_added_asset_class_to_symbol_profile/migration.sql index 5050a9033..da37ab8cb 100644 --- a/prisma/migrations/20210808075949_added_asset_class_to_symbol_profile/migration.sql +++ b/prisma/migrations/20210808075949_added_asset_class_to_symbol_profile/migration.sql @@ -2,4 +2,4 @@ CREATE TYPE "AssetClass" AS ENUM ('CASH', 'COMMODITY', 'EQUITY'); -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "assetClass" "AssetClass"; +ALTER TABLE "SymbolProfile" ADD COLUMN "assetClass" "AssetClass"; diff --git a/prisma/migrations/20210815180121_added_settings_to_settings/migration.sql b/prisma/migrations/20210815180121_added_settings_to_settings/migration.sql index da863fb73..2e7c357f3 100644 --- a/prisma/migrations/20210815180121_added_settings_to_settings/migration.sql +++ b/prisma/migrations/20210815180121_added_settings_to_settings/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "Settings" ADD COLUMN "settings" JSONB; +ALTER TABLE "Settings" ADD COLUMN "settings" JSONB; diff --git a/prisma/migrations/20210822200534_added_asset_sub_class_to_symbol_profile/migration.sql b/prisma/migrations/20210822200534_added_asset_sub_class_to_symbol_profile/migration.sql index ca1ad3d26..7d1122c88 100644 --- a/prisma/migrations/20210822200534_added_asset_sub_class_to_symbol_profile/migration.sql +++ b/prisma/migrations/20210822200534_added_asset_sub_class_to_symbol_profile/migration.sql @@ -2,4 +2,4 @@ CREATE TYPE "AssetSubClass" AS ENUM ('CRYPTOCURRENCY', 'ETF', 'STOCK'); -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "assetSubClass" "AssetSubClass"; +ALTER TABLE "SymbolProfile" ADD COLUMN "assetSubClass" "AssetSubClass"; diff --git a/prisma/migrations/20210916182355_added_data_source_to_market_data/migration.sql b/prisma/migrations/20210916182355_added_data_source_to_market_data/migration.sql index 83911236a..720460f57 100644 --- a/prisma/migrations/20210916182355_added_data_source_to_market_data/migration.sql +++ b/prisma/migrations/20210916182355_added_data_source_to_market_data/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "MarketData" ADD COLUMN "dataSource" "DataSource" NOT NULL DEFAULT E'YAHOO'; +ALTER TABLE "MarketData" ADD COLUMN "dataSource" "DataSource" NOT NULL DEFAULT E'YAHOO'; diff --git a/prisma/migrations/20211107082008_added_symbol_mapping_to_symbol_profile/migration.sql b/prisma/migrations/20211107082008_added_symbol_mapping_to_symbol_profile/migration.sql index a6cdeb92c..07f6a3b3d 100644 --- a/prisma/migrations/20211107082008_added_symbol_mapping_to_symbol_profile/migration.sql +++ b/prisma/migrations/20211107082008_added_symbol_mapping_to_symbol_profile/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "symbolMapping" JSONB; +ALTER TABLE "SymbolProfile" ADD COLUMN "symbolMapping" JSONB; diff --git a/prisma/migrations/20211107171624_added_scraper_configuration_to_symbol_profile/migration.sql b/prisma/migrations/20211107171624_added_scraper_configuration_to_symbol_profile/migration.sql index 84ca4bb96..ab32cddef 100644 --- a/prisma/migrations/20211107171624_added_scraper_configuration_to_symbol_profile/migration.sql +++ b/prisma/migrations/20211107171624_added_scraper_configuration_to_symbol_profile/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "scraperConfiguration" JSONB; +ALTER TABLE "SymbolProfile" ADD COLUMN "scraperConfiguration" JSONB; diff --git a/prisma/migrations/20220227093650_added_url_to_symbol_profile/migration.sql b/prisma/migrations/20220227093650_added_url_to_symbol_profile/migration.sql index 61456216c..b5781f8d1 100644 --- a/prisma/migrations/20220227093650_added_url_to_symbol_profile/migration.sql +++ b/prisma/migrations/20220227093650_added_url_to_symbol_profile/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "SymbolProfile" ADD COLUMN "url" TEXT; +ALTER TABLE "SymbolProfile" ADD COLUMN "url" TEXT; From f01a3f893d89e02756d46e08e11d9ef89633d089 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 25 Sep 2022 18:02:46 +0200 Subject: [PATCH 11/29] Exclude accounts (#1289) * Exclude accounts * Update changelog --- CHANGELOG.md | 6 + .../api/src/app/account/account.controller.ts | 7 +- apps/api/src/app/account/account.service.ts | 12 +- .../api/src/app/account/create-account.dto.ts | 12 +- .../api/src/app/account/update-account.dto.ts | 12 +- apps/api/src/app/order/order.controller.ts | 3 +- apps/api/src/app/order/order.service.ts | 42 ++-- .../src/app/portfolio/portfolio.controller.ts | 64 ++--- .../src/app/portfolio/portfolio.service.ts | 222 ++++++++++++------ .../account-detail-dialog.component.ts | 2 +- .../account-detail-dialog.html | 6 +- .../home-summary/home-summary.component.ts | 50 +++- .../portfolio-summary.component.html | 11 + .../pages/accounts/accounts-page.component.ts | 7 +- .../create-or-update-account-dialog.html | 8 + .../create-or-update-account-dialog.module.ts | 2 + .../portfolio/fire/fire-page.component.ts | 8 +- apps/client/src/app/services/data.service.ts | 36 +-- .../interfaces/portfolio-details.interface.ts | 6 +- .../interfaces/portfolio-summary.interface.ts | 3 +- .../migration.sql | 2 + prisma/schema.prisma | 1 + 22 files changed, 345 insertions(+), 177 deletions(-) create mode 100644 prisma/migrations/20220924175215_added_is_excluded_to_account/migration.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 20277377b..6fd6c7129 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added support to exclude an account from analysis + ## 1.197.0 - 24.09.2022 ### Added diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index 524e36f5a..3ef671cc4 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -96,7 +96,9 @@ export class AccountController { let accountsWithAggregations = await this.portfolioService.getAccountsWithAggregations( - impersonationUserId || this.request.user.id + impersonationUserId || this.request.user.id, + undefined, + true ); if ( @@ -139,7 +141,8 @@ export class AccountController { let accountsWithAggregations = await this.portfolioService.getAccountsWithAggregations( impersonationUserId || this.request.user.id, - [{ id, type: 'ACCOUNT' }] + [{ id, type: 'ACCOUNT' }], + true ); if ( diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts index b9b65716a..7c10fc31f 100644 --- a/apps/api/src/app/account/account.service.ts +++ b/apps/api/src/app/account/account.service.ts @@ -107,15 +107,23 @@ export class AccountService { public async getCashDetails({ currency, filters = [], - userId + userId, + withExcludedAccounts = false }: { currency: string; filters?: Filter[]; userId: string; + withExcludedAccounts?: boolean; }): Promise { let totalCashBalanceInBaseCurrency = new Big(0); - const where: Prisma.AccountWhereInput = { userId }; + const where: Prisma.AccountWhereInput = { + userId + }; + + if (withExcludedAccounts === false) { + where.isExcluded = false; + } const { ACCOUNT: filtersByAccount, diff --git a/apps/api/src/app/account/create-account.dto.ts b/apps/api/src/app/account/create-account.dto.ts index f53a20e76..3ea13e20a 100644 --- a/apps/api/src/app/account/create-account.dto.ts +++ b/apps/api/src/app/account/create-account.dto.ts @@ -1,5 +1,11 @@ import { AccountType } from '@prisma/client'; -import { IsNumber, IsString, ValidateIf } from 'class-validator'; +import { + IsBoolean, + IsNumber, + IsOptional, + IsString, + ValidateIf +} from 'class-validator'; export class CreateAccountDto { @IsString() @@ -11,6 +17,10 @@ export class CreateAccountDto { @IsString() currency: string; + @IsBoolean() + @IsOptional() + isExcluded?: boolean; + @IsString() name: string; diff --git a/apps/api/src/app/account/update-account.dto.ts b/apps/api/src/app/account/update-account.dto.ts index 343f46a7a..0b5737607 100644 --- a/apps/api/src/app/account/update-account.dto.ts +++ b/apps/api/src/app/account/update-account.dto.ts @@ -1,5 +1,11 @@ import { AccountType } from '@prisma/client'; -import { IsNumber, IsString, ValidateIf } from 'class-validator'; +import { + IsBoolean, + IsNumber, + IsOptional, + IsString, + ValidateIf +} from 'class-validator'; export class UpdateAccountDto { @IsString() @@ -14,6 +20,10 @@ export class UpdateAccountDto { @IsString() id: string; + @IsBoolean() + @IsOptional() + isExcluded?: boolean; + @IsString() name: string; diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index e3cafefca..a0c606b8c 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -109,7 +109,8 @@ export class OrderController { filters, userCurrency, includeDrafts: true, - userId: impersonationUserId || this.request.user.id + userId: impersonationUserId || this.request.user.id, + withExcludedAccounts: true }); if ( diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index bf549200e..b95c96975 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -189,13 +189,15 @@ export class OrderService { includeDrafts = false, types, userCurrency, - userId + userId, + withExcludedAccounts = false }: { filters?: Filter[]; includeDrafts?: boolean; types?: TypeOfOrder[]; userCurrency: string; userId: string; + withExcludedAccounts?: boolean; }): Promise { const where: Prisma.OrderWhereInput = { userId }; @@ -284,24 +286,28 @@ export class OrderService { }, orderBy: { date: 'asc' } }) - ).map((order) => { - const value = new Big(order.quantity).mul(order.unitPrice).toNumber(); - - return { - ...order, - value, - feeInBaseCurrency: this.exchangeRateDataService.toCurrency( - order.fee, - order.SymbolProfile.currency, - userCurrency - ), - valueInBaseCurrency: this.exchangeRateDataService.toCurrency( + ) + .filter((order) => { + return withExcludedAccounts || order.Account?.isExcluded === false; + }) + .map((order) => { + const value = new Big(order.quantity).mul(order.unitPrice).toNumber(); + + return { + ...order, value, - order.SymbolProfile.currency, - userCurrency - ) - }; - }); + feeInBaseCurrency: this.exchangeRateDataService.toCurrency( + order.fee, + order.SymbolProfile.currency, + userCurrency + ), + valueInBaseCurrency: this.exchangeRateDataService.toCurrency( + value, + order.SymbolProfile.currency, + userCurrency + ) + }; + }); } public async updateOrder({ diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 66cd408cc..4a017388f 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -148,12 +148,15 @@ export class PortfolioController { }) ]; + let portfolioSummary: PortfolioSummary; + const { accounts, filteredValueInBaseCurrency, filteredValueInPercentage, hasErrors, holdings, + summary, totalValueInBaseCurrency } = await this.portfolioService.getDetails( impersonationId, @@ -166,6 +169,8 @@ export class PortfolioController { hasError = true; } + portfolioSummary = summary; + if ( impersonationId || this.userService.isRestrictedView(this.request.user) @@ -199,6 +204,22 @@ export class PortfolioController { accounts[name].current = current / totalValue; accounts[name].original = original / totalInvestment; } + + portfolioSummary = nullifyValuesInObject(summary, [ + 'cash', + 'committedFunds', + 'currentGrossPerformance', + 'currentNetPerformance', + 'currentValue', + 'dividend', + 'emergencyFund', + 'excludedAccountsAndActivities', + 'fees', + 'items', + 'netWorth', + 'totalBuy', + 'totalSell' + ]); } let hasDetails = true; @@ -224,7 +245,8 @@ export class PortfolioController { filteredValueInPercentage, hasError, holdings, - totalValueInBaseCurrency + totalValueInBaseCurrency, + summary: hasDetails ? portfolioSummary : undefined }; } @@ -420,46 +442,6 @@ export class PortfolioController { return portfolioPublicDetails; } - @Get('summary') - @UseGuards(AuthGuard('jwt')) - public async getSummary( - @Headers('impersonation-id') impersonationId - ): Promise { - if ( - this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === 'Basic' - ) { - throw new HttpException( - getReasonPhrase(StatusCodes.FORBIDDEN), - StatusCodes.FORBIDDEN - ); - } - - let summary = await this.portfolioService.getSummary(impersonationId); - - if ( - impersonationId || - this.userService.isRestrictedView(this.request.user) - ) { - summary = nullifyValuesInObject(summary, [ - 'cash', - 'committedFunds', - 'currentGrossPerformance', - 'currentNetPerformance', - 'currentValue', - 'dividend', - 'emergencyFund', - 'fees', - 'items', - 'netWorth', - 'totalBuy', - 'totalSell' - ]); - } - - return summary; - } - @Get('position/:dataSource/:symbol') @UseInterceptors(TransformDataSourceInRequestInterceptor) @UseInterceptors(TransformDataSourceInResponseInterceptor) diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index c38e2a8d0..a49bda912 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -50,8 +50,11 @@ import type { import { Inject, Injectable } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { + Account, AssetClass, DataSource, + Order, + Platform, Prisma, Tag, Type as TypeOfOrder @@ -106,7 +109,8 @@ export class PortfolioService { public async getAccounts( aUserId: string, - aFilters?: Filter[] + aFilters?: Filter[], + withExcludedAccounts = false ): Promise { const where: Prisma.AccountWhereInput = { userId: aUserId }; @@ -120,7 +124,13 @@ export class PortfolioService { include: { Order: true, Platform: true }, orderBy: { name: 'asc' } }), - this.getDetails(aUserId, aUserId, undefined, aFilters) + this.getDetails( + aUserId, + aUserId, + undefined, + aFilters, + withExcludedAccounts + ) ]); const userCurrency = this.request.user.Settings.settings.baseCurrency; @@ -160,9 +170,14 @@ export class PortfolioService { public async getAccountsWithAggregations( aUserId: string, - aFilters?: Filter[] + aFilters?: Filter[], + withExcludedAccounts = false ): Promise { - const accounts = await this.getAccounts(aUserId, aFilters); + const accounts = await this.getAccounts( + aUserId, + aFilters, + withExcludedAccounts + ); let totalBalanceInBaseCurrency = new Big(0); let totalValueInBaseCurrency = new Big(0); let transactionCount = 0; @@ -410,7 +425,8 @@ export class PortfolioService { aImpersonationId: string, aUserId: string, aDateRange: DateRange = 'max', - aFilters?: Filter[] + aFilters?: Filter[], + withExcludedAccounts = false ): Promise { const userId = await this.getUserId(aImpersonationId, aUserId); const user = await this.userService.user({ id: userId }); @@ -426,6 +442,7 @@ export class PortfolioService { const { orders, portfolioOrders, transactionPoints } = await this.getTransactionPoints({ userId, + withExcludedAccounts, filters: aFilters }); @@ -580,6 +597,7 @@ export class PortfolioService { portfolioItemsNow, userCurrency, userId, + withExcludedAccounts, filters: aFilters }); @@ -588,6 +606,7 @@ export class PortfolioService { return { accounts, holdings, + summary, filteredValueInBaseCurrency: filteredValueInBaseCurrency.toNumber(), filteredValueInPercentage: summary.netWorth ? filteredValueInBaseCurrency.div(summary.netWorth).toNumber() @@ -606,7 +625,11 @@ export class PortfolioService { const userId = await this.getUserId(aImpersonationId, this.request.user.id); const orders = ( - await this.orderService.getOrders({ userCurrency, userId }) + await this.orderService.getOrders({ + userCurrency, + userId, + withExcludedAccounts: true + }) ).filter(({ SymbolProfile }) => { return ( SymbolProfile.dataSource === aDataSource && @@ -1181,74 +1204,6 @@ export class PortfolioService { }; } - public async getSummary(aImpersonationId: string): Promise { - const userCurrency = this.request.user.Settings.settings.baseCurrency; - const userId = await this.getUserId(aImpersonationId, this.request.user.id); - const user = await this.userService.user({ id: userId }); - - const performanceInformation = await this.getPerformance(aImpersonationId); - - const { balanceInBaseCurrency } = await this.accountService.getCashDetails({ - userId, - currency: userCurrency - }); - const orders = await this.orderService.getOrders({ - userCurrency, - userId - }); - const dividend = this.getDividend(orders).toNumber(); - const emergencyFund = new Big( - (user.Settings?.settings as UserSettings)?.emergencyFund ?? 0 - ); - const fees = this.getFees(orders).toNumber(); - const firstOrderDate = orders[0]?.date; - const items = this.getItems(orders).toNumber(); - - const totalBuy = this.getTotalByType(orders, userCurrency, 'BUY'); - const totalSell = this.getTotalByType(orders, userCurrency, 'SELL'); - - const cash = new Big(balanceInBaseCurrency).minus(emergencyFund).toNumber(); - const committedFunds = new Big(totalBuy).minus(totalSell); - - const netWorth = new Big(balanceInBaseCurrency) - .plus(performanceInformation.performance.currentValue) - .plus(items) - .toNumber(); - - const daysInMarket = differenceInDays(new Date(), firstOrderDate); - - const annualizedPerformancePercent = new PortfolioCalculator({ - currency: userCurrency, - currentRateService: this.currentRateService, - orders: [] - }) - .getAnnualizedPerformancePercent({ - daysInMarket, - netPerformancePercent: new Big( - performanceInformation.performance.currentNetPerformancePercent - ) - }) - ?.toNumber(); - - return { - ...performanceInformation.performance, - annualizedPerformancePercent, - cash, - dividend, - fees, - firstOrderDate, - items, - netWorth, - totalBuy, - totalSell, - committedFunds: committedFunds.toNumber(), - emergencyFund: emergencyFund.toNumber(), - ordersCount: orders.filter((order) => { - return order.type === 'BUY' || order.type === 'SELL'; - }).length - }; - } - private async getCashPositions({ cashDetails, emergencyFund, @@ -1424,14 +1379,117 @@ export class PortfolioService { return portfolioStart; } + private async getSummary( + aImpersonationId: string + ): Promise { + const userCurrency = this.request.user.Settings.settings.baseCurrency; + const userId = await this.getUserId(aImpersonationId, this.request.user.id); + const user = await this.userService.user({ id: userId }); + + const performanceInformation = await this.getPerformance(aImpersonationId); + + const { balanceInBaseCurrency } = await this.accountService.getCashDetails({ + userId, + currency: userCurrency + }); + const orders = await this.orderService.getOrders({ + userCurrency, + userId + }); + + const excludedActivities = ( + await this.orderService.getOrders({ + userCurrency, + userId, + withExcludedAccounts: true + }) + ).filter(({ Account: account }) => { + return account?.isExcluded ?? false; + }); + + const dividend = this.getDividend(orders).toNumber(); + const emergencyFund = new Big( + (user.Settings?.settings as UserSettings)?.emergencyFund ?? 0 + ); + const fees = this.getFees(orders).toNumber(); + const firstOrderDate = orders[0]?.date; + const items = this.getItems(orders).toNumber(); + + const totalBuy = this.getTotalByType(orders, userCurrency, 'BUY'); + const totalSell = this.getTotalByType(orders, userCurrency, 'SELL'); + + const cash = new Big(balanceInBaseCurrency).minus(emergencyFund).toNumber(); + const committedFunds = new Big(totalBuy).minus(totalSell); + const totalOfExcludedActivities = new Big( + this.getTotalByType(excludedActivities, userCurrency, 'BUY') + ).minus(this.getTotalByType(excludedActivities, userCurrency, 'SELL')); + + const cashDetailsWithExcludedAccounts = + await this.accountService.getCashDetails({ + userId, + currency: userCurrency, + withExcludedAccounts: true + }); + + const excludedBalanceInBaseCurrency = new Big( + cashDetailsWithExcludedAccounts.balanceInBaseCurrency + ).minus(balanceInBaseCurrency); + + const excludedAccountsAndActivities = excludedBalanceInBaseCurrency + .plus(totalOfExcludedActivities) + .toNumber(); + + const netWorth = new Big(balanceInBaseCurrency) + .plus(performanceInformation.performance.currentValue) + .plus(items) + .plus(excludedAccountsAndActivities) + .toNumber(); + + const daysInMarket = differenceInDays(new Date(), firstOrderDate); + + const annualizedPerformancePercent = new PortfolioCalculator({ + currency: userCurrency, + currentRateService: this.currentRateService, + orders: [] + }) + .getAnnualizedPerformancePercent({ + daysInMarket, + netPerformancePercent: new Big( + performanceInformation.performance.currentNetPerformancePercent + ) + }) + ?.toNumber(); + + return { + ...performanceInformation.performance, + annualizedPerformancePercent, + cash, + dividend, + excludedAccountsAndActivities, + fees, + firstOrderDate, + items, + netWorth, + totalBuy, + totalSell, + committedFunds: committedFunds.toNumber(), + emergencyFund: emergencyFund.toNumber(), + ordersCount: orders.filter((order) => { + return order.type === 'BUY' || order.type === 'SELL'; + }).length + }; + } + private async getTransactionPoints({ filters, includeDrafts = false, - userId + userId, + withExcludedAccounts }: { filters?: Filter[]; includeDrafts?: boolean; userId: string; + withExcludedAccounts?: boolean; }): Promise<{ transactionPoints: TransactionPoint[]; orders: OrderWithAccount[]; @@ -1445,6 +1503,7 @@ export class PortfolioService { includeDrafts, userCurrency, userId, + withExcludedAccounts, types: ['BUY', 'SELL'] }); @@ -1496,17 +1555,22 @@ export class PortfolioService { orders, portfolioItemsNow, userCurrency, - userId + userId, + withExcludedAccounts }: { filters?: Filter[]; orders: OrderWithAccount[]; portfolioItemsNow: { [p: string]: TimelinePosition }; userCurrency: string; userId: string; + withExcludedAccounts?: boolean; }) { const accounts: PortfolioDetails['accounts'] = {}; - let currentAccounts = []; + let currentAccounts: (Account & { + Order?: Order[]; + Platform?: Platform; + })[] = []; if (filters.length === 0) { currentAccounts = await this.accountService.getAccounts(userId); @@ -1526,6 +1590,10 @@ export class PortfolioService { }); } + currentAccounts = currentAccounts.filter((account) => { + return withExcludedAccounts || account.isExcluded === false; + }); + for (const account of currentAccounts) { const ordersByAccount = orders.filter(({ accountId }) => { return accountId === account.id; diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index ca2f229e7..a0c11bce8 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -61,7 +61,7 @@ export class AccountDetailDialog implements OnDestroy, OnInit { .subscribe(({ accountType, name, Platform, valueInBaseCurrency }) => { this.accountType = accountType; this.name = name; - this.platformName = Platform?.name; + this.platformName = Platform?.name ?? '-'; this.valueInBaseCurrency = valueInBaseCurrency; this.changeDetectorRef.markForCheck(); diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index edf111ffc..53a9c76ea 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -21,10 +21,12 @@
- Account Type + Account Type
- Platform + Platform
diff --git a/apps/client/src/app/components/home-summary/home-summary.component.ts b/apps/client/src/app/components/home-summary/home-summary.component.ts index 106aba6c9..f10f09fe3 100644 --- a/apps/client/src/app/components/home-summary/home-summary.component.ts +++ b/apps/client/src/app/components/home-summary/home-summary.component.ts @@ -1,8 +1,18 @@ import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { + MatSnackBar, + MatSnackBarRef, + TextOnlySnackBar +} from '@angular/material/snack-bar'; +import { Router } from '@angular/router'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { PortfolioSummary, User } from '@ghostfolio/common/interfaces'; +import { + InfoItem, + PortfolioSummary, + User +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -14,8 +24,11 @@ import { takeUntil } from 'rxjs/operators'; }) export class HomeSummaryComponent implements OnDestroy, OnInit { public hasImpersonationId: boolean; + public hasPermissionForSubscription: boolean; public hasPermissionToUpdateUserSettings: boolean; + public info: InfoItem; public isLoading = true; + public snackBarRef: MatSnackBarRef; public summary: PortfolioSummary; public user: User; @@ -25,8 +38,17 @@ export class HomeSummaryComponent implements OnDestroy, OnInit { private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, private impersonationStorageService: ImpersonationStorageService, + private router: Router, + private snackBar: MatSnackBar, private userService: UserService ) { + this.info = this.dataService.fetchInfo(); + + this.hasPermissionForSubscription = hasPermission( + this.info?.globalPermissions, + permissions.enableSubscription + ); + this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((state) => { @@ -50,8 +72,6 @@ export class HomeSummaryComponent implements OnDestroy, OnInit { .subscribe((aId) => { this.hasImpersonationId = !!aId; }); - - this.update(); } public onChangeEmergencyFund(emergencyFund: number) { @@ -81,12 +101,30 @@ export class HomeSummaryComponent implements OnDestroy, OnInit { this.isLoading = true; this.dataService - .fetchPortfolioSummary() + .fetchPortfolioDetails({}) .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe((response) => { - this.summary = response; + .subscribe(({ summary }) => { + this.summary = summary; this.isLoading = false; + if (!this.summary) { + this.snackBarRef = this.snackBar.open( + $localize`This feature requires a subscription.`, + this.hasPermissionForSubscription + ? $localize`Upgrade Plan` + : undefined, + { duration: 6000 } + ); + + this.snackBarRef.afterDismissed().subscribe(() => { + this.snackBarRef = undefined; + }); + + this.snackBarRef.onAction().subscribe(() => { + this.router.navigate(['/pricing']); + }); + } + this.changeDetectorRef.markForCheck(); }); diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html index 577d41741..78e30675c 100644 --- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html +++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -172,6 +172,17 @@ >
+
+
Excluded from Analysis
+
+ +
+

diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 81c02c2fd..6d7f84555 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -59,8 +59,8 @@ export class AccountsPageComponent implements OnDestroy, OnInit { this.openCreateAccountDialog(); } else if (params['editDialog']) { if (this.accounts) { - const account = this.accounts.find((account) => { - return account.id === params['accountId']; + const account = this.accounts.find(({ id }) => { + return id === params['accountId']; }); this.openUpdateAccountDialog(account); @@ -155,6 +155,7 @@ export class AccountsPageComponent implements OnDestroy, OnInit { balance, currency, id, + isExcluded, name, platformId }: AccountModel): void { @@ -165,6 +166,7 @@ export class AccountsPageComponent implements OnDestroy, OnInit { balance, currency, id, + isExcluded, name, platformId } @@ -231,6 +233,7 @@ export class AccountsPageComponent implements OnDestroy, OnInit { accountType: AccountType.SECURITIES, balance: 0, currency: this.user?.settings?.baseCurrency, + isExcluded: false, name: null, platformId: null } diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html index 971487356..ba2a1cee2 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -50,6 +50,14 @@
+
+ Exclude from Analysis +
Account ID diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts index 3a3f2f517..528835f9a 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts @@ -2,6 +2,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; @@ -15,6 +16,7 @@ import { CreateOrUpdateAccountDialog } from './create-or-update-account-dialog.c CommonModule, FormsModule, MatButtonModule, + MatCheckboxModule, MatDialogModule, MatFormFieldModule, MatInputModule, diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index d4d6abb26..032cf3b31 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -37,14 +37,14 @@ export class FirePageComponent implements OnDestroy, OnInit { this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.dataService - .fetchPortfolioSummary() + .fetchPortfolioDetails({}) .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe(({ cash, currentValue }) => { - if (cash === null || currentValue === null) { + .subscribe(({ summary }) => { + if (summary.cash === null || summary.currentValue === null) { return; } - this.fireWealth = new Big(currentValue); + this.fireWealth = new Big(summary.currentValue); this.withdrawalRatePerYear = this.fireWealth.mul(4).div(100); this.withdrawalRatePerMonth = this.withdrawalRatePerYear.div(12); diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index d33faeb74..b725a1d05 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -31,7 +31,6 @@ import { PortfolioPerformanceResponse, PortfolioPublicDetails, PortfolioReport, - PortfolioSummary, UniqueAsset, User } from '@ghostfolio/common/interfaces'; @@ -302,7 +301,11 @@ export class DataService { ); } - public fetchPortfolioDetails({ filters }: { filters?: Filter[] }) { + public fetchPortfolioDetails({ + filters + }: { + filters?: Filter[]; + }): Observable { let params = new HttpParams(); if (filters?.length > 0) { @@ -348,9 +351,20 @@ export class DataService { } } - return this.http.get('/api/v1/portfolio/details', { - params - }); + return this.http + .get('/api/v1/portfolio/details', { + params + }) + .pipe( + map((response) => { + if (response.summary?.firstOrderDate) { + response.summary.firstOrderDate = parseISO( + response.summary.firstOrderDate + ); + } + return response; + }) + ); } public fetchPortfolioPerformance({ @@ -376,18 +390,6 @@ export class DataService { return this.http.get('/api/v1/portfolio/report'); } - public fetchPortfolioSummary(): Observable { - return this.http.get('/api/v1/portfolio/summary').pipe( - map((summary) => { - if (summary.firstOrderDate) { - summary.firstOrderDate = parseISO(summary.firstOrderDate); - } - - return summary; - }) - ); - } - public fetchPositionDetail({ dataSource, symbol diff --git a/libs/common/src/lib/interfaces/portfolio-details.interface.ts b/libs/common/src/lib/interfaces/portfolio-details.interface.ts index cffa3ac0d..d17e4c75e 100644 --- a/libs/common/src/lib/interfaces/portfolio-details.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-details.interface.ts @@ -1,4 +1,7 @@ -import { PortfolioPosition } from '@ghostfolio/common/interfaces'; +import { + PortfolioPosition, + PortfolioSummary +} from '@ghostfolio/common/interfaces'; export interface PortfolioDetails { accounts: { @@ -13,5 +16,6 @@ export interface PortfolioDetails { filteredValueInBaseCurrency?: number; filteredValueInPercentage: number; holdings: { [symbol: string]: PortfolioPosition }; + summary: PortfolioSummary; totalValueInBaseCurrency?: number; } diff --git a/libs/common/src/lib/interfaces/portfolio-summary.interface.ts b/libs/common/src/lib/interfaces/portfolio-summary.interface.ts index b692e9ba9..97a50cfed 100644 --- a/libs/common/src/lib/interfaces/portfolio-summary.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-summary.interface.ts @@ -3,9 +3,10 @@ import { PortfolioPerformance } from './portfolio-performance.interface'; export interface PortfolioSummary extends PortfolioPerformance { annualizedPerformancePercent: number; cash: number; - dividend: number; committedFunds: number; + dividend: number; emergencyFund: number; + excludedAccountsAndActivities: number; fees: number; firstOrderDate: Date; items: number; diff --git a/prisma/migrations/20220924175215_added_is_excluded_to_account/migration.sql b/prisma/migrations/20220924175215_added_is_excluded_to_account/migration.sql new file mode 100644 index 000000000..81245a47a --- /dev/null +++ b/prisma/migrations/20220924175215_added_is_excluded_to_account/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Account" ADD COLUMN "isExcluded" BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bc7ca28f7..11bef3e47 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -27,6 +27,7 @@ model Account { currency String? id String @default(uuid()) isDefault Boolean @default(false) + isExcluded Boolean @default(false) name String? platformId String? updatedAt DateTime @updatedAt From 3006c21b12f50da016e7e4a7fa7feb73b89b243d Mon Sep 17 00:00:00 2001 From: Mitchell Date: Sun, 25 Sep 2022 18:12:33 +0200 Subject: [PATCH 12/29] Add dutch translation (#1291) * Add dutch translation --- angular.json | 17 +- apps/api/src/app/frontend.middleware.ts | 14 + .../pages/account/account-page.component.ts | 2 +- .../src/app/pages/account/account-page.html | 1 + apps/client/src/locales/messages.nl.xlf | 2650 +++++++++++++++++ libs/common/src/lib/helper.ts | 4 +- 6 files changed, 2685 insertions(+), 3 deletions(-) create mode 100644 apps/client/src/locales/messages.nl.xlf diff --git a/angular.json b/angular.json index dd37696ff..991e64c89 100644 --- a/angular.json +++ b/angular.json @@ -140,6 +140,10 @@ "baseHref": "/it/", "localize": ["it"] }, + "development-nl": { + "baseHref": "/nl/", + "localize": ["nl"] + }, "production": { "fileReplacements": [ { @@ -187,6 +191,9 @@ "development-it": { "browserTarget": "client:build:development-it" }, + "development-nl": { + "browserTarget": "client:build:development-nl" + }, "production": { "browserTarget": "client:build:production" } @@ -198,7 +205,11 @@ "browserTarget": "client:build", "includeContext": true, "outputPath": "src/locales", - "targetFiles": ["messages.de.xlf", "messages.it.xlf"] + "targetFiles": [ + "messages.de.xlf", + "messages.it.xlf", + "messages.nl.xlf" + ] } }, "lint": { @@ -225,6 +236,10 @@ "it": { "baseHref": "/it/", "translation": "apps/client/src/locales/messages.it.xlf" + }, + "nl": { + "baseHref": "/nl/", + "translation": "apps/client/src/locales/messages.nl.xlf" } }, "sourceLocale": "en" diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts index aec14e3ee..876287db4 100644 --- a/apps/api/src/app/frontend.middleware.ts +++ b/apps/api/src/app/frontend.middleware.ts @@ -12,6 +12,7 @@ export class FrontendMiddleware implements NestMiddleware { public indexHtmlDe = ''; public indexHtmlEn = ''; public indexHtmlIt = ''; + public indexHtmlNl = ''; public isProduction: boolean; public constructor( @@ -37,6 +38,10 @@ export class FrontendMiddleware implements NestMiddleware { this.getPathOfIndexHtmlFile('it'), 'utf8' ); + this.indexHtmlNl = fs.readFileSync( + this.getPathOfIndexHtmlFile('nl'), + 'utf8' + ); } catch {} } @@ -75,6 +80,15 @@ export class FrontendMiddleware implements NestMiddleware { rootUrl: this.configurationService.get('ROOT_URL') }) ); + } else if (req.path === '/nl' || req.path.startsWith('/nl/')) { + res.send( + this.interpolate(this.indexHtmlNl, { + featureGraphicPath, + languageCode: 'nl', + path: req.path, + rootUrl: this.configurationService.get('ROOT_URL') + }) + ); } else { res.send( this.interpolate(this.indexHtmlEn, { diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index 3f7ec90d5..fee2b2358 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -54,7 +54,7 @@ export class AccountPageComponent implements OnDestroy, OnInit { public hasPermissionToUpdateViewMode: boolean; public hasPermissionToUpdateUserSettings: boolean; public language = document.documentElement.lang; - public locales = ['de', 'de-CH', 'en-GB', 'en-US', 'it']; + public locales = ['de', 'de-CH', 'en-GB', 'en-US', 'it', 'nl']; public price: number; public priceId: string; public snackBarRef: MatSnackBarRef; diff --git a/apps/client/src/app/pages/account/account-page.html b/apps/client/src/app/pages/account/account-page.html index 12c52f126..aa0983d15 100644 --- a/apps/client/src/app/pages/account/account-page.html +++ b/apps/client/src/app/pages/account/account-page.html @@ -133,6 +133,7 @@ Deutsch English Italiano + Nederlands
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf new file mode 100644 index 000000000..597b886c0 --- /dev/null +++ b/apps/client/src/locales/messages.nl.xlf @@ -0,0 +1,2650 @@ + + + + + Create Account + Account aanmaken + + apps/client/src/app/pages/register/register-page.html + 27,29 + + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 2 + + + + The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. + Het risico van verlies in de handel kan aanzienlijk zijn. Het is niet raadzaam om geld te beleggen dat u op korte termijn nodig kunt hebben. + + apps/client/src/app/app.component.html + 55,56 + + + + Grantee + Begunstigde + + apps/client/src/app/components/access-table/access-table.component.html + 10 + + + + Type + Type + + apps/client/src/app/components/access-table/access-table.component.html + 17 + + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 28 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 13 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 12,14 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 52 + + + + Details + Details + + apps/client/src/app/components/access-table/access-table.component.html + 27 + + + + Revoke + Intrekken + + apps/client/src/app/components/access-table/access-table.component.html + 54 + + + + Do you really want to revoke this granted access? + Wilt u deze verleende toegang echt intrekken? + + apps/client/src/app/components/access-table/access-table.component.ts + 49 + + + + Activities + Activiteiten + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 33 + + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 58 + + + apps/client/src/app/components/admin-users/admin-users.html + 17 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 214 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 24 + + + apps/client/src/app/pages/portfolio/transactions/transactions-page.html + 4,7 + + + + Name + Naam + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 3 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 36 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 7 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 70,72 + + + + Total + Totaal + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 18 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 47 + + + + Value + Waarde + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 110 + + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 144 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 52 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 221 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 256 + + + + Edit + Bewerken + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 186 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 365 + + + + Delete + Verwijderen + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 194 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 132 + + + apps/client/src/app/components/admin-users/admin-users.html + 87 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 381 + + + + Do you really want to delete this account? + Wilt u deze account echt verwijderen? + + apps/client/src/app/components/accounts-table/accounts-table.component.ts + 73 + + + + Delete Jobs + Taken verwijderen + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 21 + + + + Symbol + Symbool + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 29 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 24 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 22 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 84 + + + + Data Source + Gegevensbron + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 30 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 33 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 86,88 + + + + Attempts + Pogingen + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31 + + + + Created + Gemaakt + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 32 + + + + Finished + Voltooid + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 33 + + + + Status + Status + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 34 + + + + Asset Profile + Activa Profiel + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 49 + + + + Historical Market Data + Historische marktgegevens + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 54 + + + + View Data + Bekijk gegevens + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 109 + + + + View Stacktrace + Bekijk Stacktrace + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 116 + + + + Delete Job + Taak verwijderen + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 119 + + + + Details for + Details voor + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 2 + + + + Date + Datum + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 6 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 92,93 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 40 + + + + Market Price + Marktprijs + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 26 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 75 + + + + Cancel + Annuleren + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 45 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 66 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 201,205 + + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 37 + + + + Save + Opslaan + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 47 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 73 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 208,213 + + + + First Activity + Eerste activiteit + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 60 + + + + Activity Count + Activiteitentelling + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 69 + + + apps/client/src/app/components/admin-overview/admin-overview.html + 11 + + + + Historical Data + Historische gegevens + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 78 + + + + Gather Data + Gegevens verzamelen + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 119 + + + + Please add a currency: + Voeg een valuta toe: + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 106 + + + + Do you really want to delete this coupon? + Wilt u deze coupon echt verwijderen? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 120 + + + + Do you really want to delete this currency? + Wilt u deze valuta echt verwijderen? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 133 + + + + Do you really want to flush the cache? + Wilt u echt de cache legen? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 150 + + + + Please set your system message: + Stel uw systeemboodschap in: + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 199 + + + + User Count + Aantal gebruikers + + apps/client/src/app/components/admin-overview/admin-overview.html + 7 + + + + per User + per gebruiker + + apps/client/src/app/components/admin-overview/admin-overview.html + 15 + + + + Gather Recent Data + Verzamel recente gegevens + + apps/client/src/app/components/admin-overview/admin-overview.html + 33 + + + + Gather All Data + Alle gegevens verzamelen + + apps/client/src/app/components/admin-overview/admin-overview.html + 46 + + + + Gather Profile Data + Verzamel profielgegevens + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 125 + + + apps/client/src/app/components/admin-overview/admin-overview.html + 60 + + + + Exchange Rates + Wisselkoersen + + apps/client/src/app/components/admin-overview/admin-overview.html + 67 + + + + Add Currency + Valuta toevoegen + + apps/client/src/app/components/admin-overview/admin-overview.html + 106 + + + + System Message + Systeembericht + + apps/client/src/app/components/admin-overview/admin-overview.html + 112 + + + + Set Message + Bericht instellen + + apps/client/src/app/components/admin-overview/admin-overview.html + 134 + + + + Read-only Mode + Alleen lezen + + apps/client/src/app/components/admin-overview/admin-overview.html + 139 + + + + Coupons + Coupons + + apps/client/src/app/components/admin-overview/admin-overview.html + 152 + + + + Add + Toevoegen + + apps/client/src/app/components/admin-overview/admin-overview.html + 183 + + + + Housekeeping + Huishouding + + apps/client/src/app/components/admin-overview/admin-overview.html + 190 + + + + Flush Cache + Cache legen + + apps/client/src/app/components/admin-overview/admin-overview.html + 194 + + + + Do you really want to delete this user? + Wilt u deze gebruiker echt verwijderen? + + apps/client/src/app/components/admin-users/admin-users.component.ts + 59 + + + + User + Gebruiker + + apps/client/src/app/components/admin-users/admin-users.html + 9 + + + apps/client/src/app/components/header/header.component.html + 145 + + + + Registration + Registratie + + apps/client/src/app/components/admin-users/admin-users.html + 11 + + + + Engagement per Day + Betrokkenheid per dag + + apps/client/src/app/components/admin-users/admin-users.html + 20 + + + + Last Request + Laatste verzoek + + apps/client/src/app/components/admin-users/admin-users.html + 22 + + + + Current Market Mood + Huidige marktstemming + + apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html + 12 + + + + Overview + Overzicht + + apps/client/src/app/components/header/header.component.html + 21 + + + apps/client/src/app/components/header/header.component.html + 157 + + + + Portfolio + Portefeuille + + apps/client/src/app/components/header/header.component.html + 32 + + + apps/client/src/app/components/header/header.component.html + 167 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 2 + + + + Accounts + Accounts + + apps/client/src/app/components/admin-users/admin-users.html + 14 + + + apps/client/src/app/components/header/header.component.html + 43 + + + apps/client/src/app/components/header/header.component.html + 175 + + + apps/client/src/app/pages/accounts/accounts-page.html + 4 + + + + Admin Control + Beheerderscontrole + + apps/client/src/app/components/header/header.component.html + 55 + + + apps/client/src/app/components/header/header.component.html + 192 + + + + Resources + Middelen + + apps/client/src/app/components/header/header.component.html + 66 + + + apps/client/src/app/components/header/header.component.html + 203 + + + apps/client/src/app/pages/resources/resources-page.html + 4 + + + + Pricing + Prijzen + + apps/client/src/app/components/header/header.component.html + 80 + + + apps/client/src/app/components/header/header.component.html + 214 + + + apps/client/src/app/components/header/header.component.html + 268 + + + + About + Over + + apps/client/src/app/components/header/header.component.html + 91 + + + apps/client/src/app/components/header/header.component.html + 257 + + + + Me + Ik + + apps/client/src/app/components/header/header.component.html + 127 + + + + My Ghostfolio + Mijn Ghostfolio + + apps/client/src/app/components/header/header.component.html + 183 + + + + About Ghostfolio + Over Ghostfolio + + apps/client/src/app/components/header/header.component.html + 222 + + + + Features + Kenmerken + + apps/client/src/app/components/header/header.component.html + 246 + + + + Markets + Markten + + apps/client/src/app/components/header/header.component.html + 280 + + + apps/client/src/app/components/home-market/home-market.html + 2 + + + + Get Started + Aan de slag + + apps/client/src/app/pages/public/public-page.html + 137 + + + + Sign in + Aanmelden + + apps/client/src/app/components/header/header.component.ts + 112 + + + apps/client/src/app/pages/webauthn/webauthn-page-routing.module.ts + 6 + + + + Oops! Incorrect Security Token. + Oeps! Onjuiste beveiligingstoken. + + apps/client/src/app/components/header/header.component.ts + 126 + + + + Manage Activities + Activiteiten beheren + + apps/client/src/app/components/home-holdings/home-holdings.html + 30 + + + apps/client/src/app/pages/portfolio/holdings/holdings-page.html + 31 + + + + Last Days + Laatste Dagen + + apps/client/src/app/components/home-market/home-market.html + 6 + + + + Summary + Samenvatting + + apps/client/src/app/components/home-summary/home-summary.html + 6 + + + + Security Token + Beveiligingstoken + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 10,14 + + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 10 + + + + or + of + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 20,22 + + + apps/client/src/app/pages/register/register-page.html + 31,33 + + + apps/client/src/app/pages/webauthn/webauthn-page.html + 28 + + + + Sign in with Internet Identity + Aanmelden met Internet Identity + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 30,32 + + + + Sign in with Google + Aanmelden met Google + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 37,43 + + + + Stay signed in + Aangemeld blijven + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 46,52 + + + + Sign in + Aanmelden + + apps/client/src/app/components/header/header.component.html + 289 + + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 56,60 + + + + Time in Market + Tijd in de markt + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 3 + + + + Buy + Kopen + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 12 + + + + Sell + Verkopen + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 23 + + + + Investment + Belegging + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 40 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 117 + + + + Absolute Gross Performance + Absoluut bruto rendement + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 51 + + + + Gross Performance (TWR) + Bruto resultaat (TWR) + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 62 + + + + Fees for + Transactiekosten voor + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 77,80 + + + + {VAR_PLURAL, plural, =1 {transaction} other {transactions}} + {VAR_PLURAL, meervoud, =1 {transaction} other {transactions}} + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 78,79 + + + + Absolute Net Performance + Absolute Netto Prestatie + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 95 + + + + Net Performance (TWR) + Netto resultaat (TWR) + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 106 + + + + Total Assets + Totaal Activa + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 122 + + + + Valuables + Kostbaarheden + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 134 + + + + Emergency Fund + Noodfonds + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 145 + + + + Buying Power + Koopkracht + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 165 + + + + Net Worth + Netto Waarde + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 179 + + + + Annualized Performance + Jaarlijks rendement + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 190 + + + + Dividend + Dividend + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 206 + + + + Please enter the amount of your emergency fund: + Voer het bedrag van uw noodfonds in: + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts + 52 + + + + Sectors + Sectoren + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 187 + + + apps/client/src/app/pages/public/public-page.html + 45 + + + + Countries + Landen + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 198 + + + + Tags + Tags + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 234 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 184,186 + + + + Report Data Glitch + Gegevensstoring melden + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 249 + + + + Allocation + Toewijzing + + apps/client/src/app/components/positions-table/positions-table.component.html + 72 + + + + Performance + Prestaties + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 55 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 91 + + + + Show all + Toon alle + + apps/client/src/app/components/positions-table/positions-table.component.html + 137 + + + + Today + Vandaag + + apps/client/src/app/components/toggle/toggle.component.ts + 21 + + + + YTD + YTD + + apps/client/src/app/components/toggle/toggle.component.ts + 22 + + + + 1Y + 1J + + apps/client/src/app/components/toggle/toggle.component.ts + 23 + + + + 5Y + 5J + + apps/client/src/app/components/toggle/toggle.component.ts + 24 + + + + Max + Max + + apps/client/src/app/components/toggle/toggle.component.ts + 25 + + + + This feature requires a subscription. + Voor deze functie is een abonnement vereist. + + apps/client/src/app/core/http-response.interceptor.ts + 67 + + + + Upgrade Plan + Upgrade plan + + apps/client/src/app/core/http-response.interceptor.ts + 69 + + + + Okay + Oké + + apps/client/src/app/core/http-response.interceptor.ts + 89 + + + + About + Over + + apps/client/src/app/pages/about/about-page-routing.module.ts + 12 + + + + Privacy Policy + Privacybeleid + + apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html + 4 + + + + Blog + Blog + + apps/client/src/app/pages/blog/blog-page.html + 4 + + + + Changelog & License + Changelog & licentie + + apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts + 12 + + + + Changelog + Changelog + + apps/client/src/app/pages/about/changelog/changelog-page.html + 4 + + + + License + Licentie + + apps/client/src/app/pages/about/changelog/changelog-page.html + 15 + + + + Privacy Policy + Privacybeleid + + apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts + 12 + + + + My Ghostfolio + Mijn Ghostfolio + + apps/client/src/app/pages/account/account-page-routing.module.ts + 12 + + + + Please enter your coupon code: + Voer uw couponcode in: + + apps/client/src/app/pages/account/account-page.component.ts + 225 + + + + Could not redeem coupon code + Kon kortingscode niet inwisselen + + apps/client/src/app/pages/account/account-page.component.ts + 235 + + + + Coupon code has been redeemed + Couponcode is ingewisseld + + apps/client/src/app/pages/account/account-page.component.ts + 247 + + + + Reload + Herladen + + apps/client/src/app/pages/account/account-page.component.ts + 248 + + + + Do you really want to remove this sign in method? + Wilt u deze aanmeldingsmethode echt verwijderen? + + apps/client/src/app/pages/account/account-page.component.ts + 294 + + + + Account + Account + + apps/client/src/app/pages/account/account-page.html + 4 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 25,27 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 282 + + + + Membership + Lidmaatschap + + apps/client/src/app/pages/account/account-page.html + 15 + + + + Upgrade + Upgrade + + apps/client/src/app/pages/account/account-page.html + 37 + + + + per year + per jaar + + apps/client/src/app/pages/account/account-page.html + 48 + + + + Try Premium + Probeer Premium + + apps/client/src/app/pages/account/account-page.html + 56 + + + + Redeem Coupon + Coupon inwisselen + + apps/client/src/app/pages/account/account-page.html + 68 + + + + Presenter View + Presentatorweergave + + apps/client/src/app/pages/account/account-page.html + 75 + + + + Hides sensitive values such as absolute performances and quantities. + Verbergt gevoelige waarden zoals absolute prestaties en hoeveelheden. + + apps/client/src/app/pages/account/account-page.html + 76,79 + + + + Base Currency + Basisvaluta + + apps/client/src/app/pages/account/account-page.html + 94 + + + + Locale + Locale + + apps/client/src/app/pages/account/account-page.html + 135 + + + + Date and number format + Formaat datum en getal + + apps/client/src/app/pages/account/account-page.html + 137 + + + + View Mode + Weergavemodus + + apps/client/src/app/pages/account/account-page.html + 160 + + + + Sign in with fingerprint + Aanmelden met vingerafdruk + + apps/client/src/app/pages/account/account-page.html + 181 + + + + User ID + Gebruikers-ID + + apps/client/src/app/pages/account/account-page.html + 208 + + + + Granted Access + Verleende toegang + + apps/client/src/app/pages/account/account-page.html + 217 + + + + Grant access + Toegang verlenen + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 2 + + + + Public + Openbaar + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 19 + + + + Accounts + Rekeningen + + apps/client/src/app/pages/accounts/accounts-page-routing.module.ts + 12 + + + + Update account + Rkening bijwerken + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 2 + + + + Add account + Rekening toevoegen + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 3 + + + + Cash + Contant geld + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 15 + + + + Securities + Effecten + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 16 + + + + Currency + Valuta + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 23 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 22 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 76,77 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 109 + + + + Cash Balance + Geldbalans + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 76 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 32 + + + + Platform + Platform + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 35 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 44 + + + + Account ID + Rekening-ID + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 55 + + + + Admin Control + Beheerderscontrole + + apps/client/src/app/pages/admin/admin-page-routing.module.ts + 23 + + + + Blog + Blog + + apps/client/src/app/pages/blog/blog-page-routing.module.ts + 12 + + + + As you are already logged in, you cannot access the demo account. + Aangezien u al ingelogd bent, heeft u geen toegang tot de demo-account. + + apps/client/src/app/pages/demo/demo-page.component.ts + 31 + + + + FAQ + FAQ + + apps/client/src/app/pages/faq/faq-page-routing.module.ts + 12 + + + + Features + Kenmerken + + apps/client/src/app/pages/features/features-page-routing.module.ts + 12 + + + + Overview + Overzicht + + apps/client/src/app/pages/home/home-page-routing.module.ts + 23 + + + apps/client/src/app/pages/zen/zen-page-routing.module.ts + 19 + + + + Markets + Markten + + apps/client/src/app/pages/markets/markets-page-routing.module.ts + 12 + + + + Allocations + Toewijzingen + + apps/client/src/app/pages/portfolio/allocations/allocations-page-routing.module.ts + 12 + + + + Allocations + Toewijzingen + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 4 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 44 + + + + By Account + Per rekening + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 33 + + + + By Currency + Per valuta + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 58 + + + + By Asset Class + Per activaklasse + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 86 + + + + By Holding + Per participatie + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 114 + + + + By Sector + Per Sector + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 142 + + + + By Continent + Per continent + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 171 + + + + By Country + Per land + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 199 + + + + Regions + Regio's + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 230 + + + apps/client/src/app/pages/public/public-page.html + 76 + + + + Analysis + Analyse + + apps/client/src/app/pages/portfolio/analysis/analysis-page-routing.module.ts + 12 + + + + Analysis + Analyse + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 2 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 69 + + + + Investment Timeline + Tijdlijn investeringen + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 105 + + + + Top + Top + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 26 + + + + Bottom + Onder + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 62 + + + + FIRE + FIRE + + apps/client/src/app/pages/portfolio/fire/fire-page-routing.module.ts + 12 + + + + FIRE + FIRE + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 4 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 115 + + + + Calculator + Rekenmachine + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 6 + + + + 4% Rule + 4% regel + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 20 + + + + Holdings + Participaties + + apps/client/src/app/pages/portfolio/holdings/holdings-page-routing.module.ts + 12 + + + + Holdings + Participaties + + apps/client/src/app/pages/portfolio/holdings/holdings-page.html + 4 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 6 + + + apps/client/src/app/pages/public/public-page.html + 14 + + + + Get an overview of your current holdings. + Een overzicht van uw huidige participaties. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 7,9 + + + + Open Holdings + Open Participaties + + apps/client/src/app/pages/portfolio/portfolio-page.html + 16 + + + + Manage your activities: stocks, ETFs, cryptocurrencies, dividend, and valuables. + Beheer uw activiteiten: aandelen, ETF's, cryptocurrencies, dividend en kostbaarheden. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 25,28 + + + + Open Activities + Activiteiten openen + + apps/client/src/app/pages/portfolio/portfolio-page.html + 35 + + + + Check the allocations of your portfolio by account, asset class, currency, sector and region. + Controleer de allocaties van uw portefeuille per rekening, activaklasse, valuta, sector en regio. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 50,53 + + + + Open Allocations + Open Allocaties + + apps/client/src/app/pages/portfolio/portfolio-page.html + 60 + + + + Ghostfolio Analysis visualizes your portfolio and shows your top and bottom performers. + Ghostfolio Analysis visualiseert uw portefeuille en toont uw top- en bodempresteerders. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 75,78 + + + + Open Analysis + Open Analyse + + apps/client/src/app/pages/portfolio/portfolio-page.html + 85 + + + + Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. + Ghostfolio X-ray gebruikt statische analyse om potentiële problemen en risico's in uw portefeuille te identificeren. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 100,103 + + + + Open X-ray + Open X-ray + + apps/client/src/app/pages/portfolio/portfolio-page.html + 106 + + + + Ghostfolio FIRE calculates metrics for the Financial Independence, Retire Early lifestyle. + Ghostfolio FIRE berekent statistieken voor de Financial Independence, Retire Early levensstijl. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 121,124 + + + + Open FIRE + Open FIRE + + apps/client/src/app/pages/portfolio/portfolio-page.html + 127 + + + + Update activity + Activiteit bijwerken + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 7,8 + + + + Add activity + Activiteit toevoegen + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 8,11 + + + + BUY + KOPEN + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 14,15 + + + + DIVIDEND + DIVIDEND + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 15,17 + + + + ITEM + ITEM + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 16,18 + + + + SELL + VERKOPEN + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 17,21 + + + + Name, symbol or ISIN + Naam, symbool of ISIN + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 37,40 + + + + Quantity + Hoeveelheid + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 106,107 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 130 + + + + Unit Price + Prijs per eenheid + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 112,113 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 159 + + + + Fee + Transactiekosten + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 131,132 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 188 + + + + Note + Opmerking + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 140,143 + + + + Asset Class + Activaklasse + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 42 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 145 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 154,156 + + + + Activities + Activiteiten + + apps/client/src/app/pages/portfolio/transactions/transactions-page-routing.module.ts + 12 + + + + Importing data... + Gegevens importeren... + + apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts + 191 + + + + Import has been completed + Import is voltooid + + apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts + 337 + + + + Pricing + Prijzen + + apps/client/src/app/pages/pricing/pricing-page-routing.module.ts + 12 + + + + Portfolio + Portefeuille + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts + 111 + + + apps/client/src/app/pages/public/public-page-routing.module.ts + 12 + + + + Currencies + Valuta's + + apps/client/src/app/pages/public/public-page.html + 30 + + + + Continents + Continenten + + apps/client/src/app/pages/public/public-page.html + 60 + + + + Ghostfolio empowers you to keep track of your wealth. + Ghostfolio stelt u in staat om uw vermogen bij te houden. + + apps/client/src/app/pages/public/public-page.html + 132,134 + + + + Registration + Registratie + + apps/client/src/app/pages/register/register-page-routing.module.ts + 12 + + + + Continue with Internet Identity + Ga verder met Internet Identity + + apps/client/src/app/pages/register/register-page.html + 41,43 + + + + Continue with Google + Verder met Google + + apps/client/src/app/pages/register/register-page.html + 48,53 + + + + Copy to clipboard + Kopieer naar klembord + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 26 + + + + I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. + Ik ga ermee akkoord dat ik mijn Security Token van hierboven op een veilige plaats heb opgeslagen. Als ik het verlies, kan ik mijn account niet terug krijgen. + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 31,34 + + + + Agree and continue + Akkoord en doorgaan + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 44 + + + + Resources + Bronnen + + apps/client/src/app/pages/resources/resources-page-routing.module.ts + 12 + + + + Oops, authentication has failed. + Oeps, authenticatie is mislukt. + + apps/client/src/app/pages/webauthn/webauthn-page.html + 18 + + + + Try again + Probeer opnieuw + + apps/client/src/app/pages/webauthn/webauthn-page.html + 26 + + + + Go back to Home Page + Ga terug naar de startpagina + + apps/client/src/app/pages/webauthn/webauthn-page.html + 30 + + + + Draft + Ontwerp + + libs/ui/src/lib/activities-table/activities-table.component.html + 95 + + + + Import Activities + Activiteiten importeren + + libs/ui/src/lib/activities-table/activities-table.component.html + 319 + + + + Export Activities + Activiteiten exporteren + + libs/ui/src/lib/activities-table/activities-table.component.html + 329 + + + + Export Drafts as ICS + Concepten exporteren als ICS + + libs/ui/src/lib/activities-table/activities-table.component.html + 339 + + + + Clone + Kloon + + libs/ui/src/lib/activities-table/activities-table.component.html + 369 + + + + Export Draft as ICS + Concepten exporteren als ICS + + libs/ui/src/lib/activities-table/activities-table.component.html + 377 + + + + Do you really want to delete this activity? + Wilt u deze activiteit echt verwijderen? + + libs/ui/src/lib/activities-table/activities-table.component.ts + 134 + + + + Index + Index + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + + + + Change from All Time High + Verandering van All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + + + + from ATH + van ATH + + libs/ui/src/lib/benchmark/benchmark.component.html + 14 + + + + Savings Rate + Spaarquote + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 10 + + + + per month + per maand + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 17 + + + + Investment Horizon + Investeringshorizon + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 21 + + + + years + jaren + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 23 + + + + Annual Interest Rate + Jaarlijkse rentevoet + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 27 + + + + Beta + Beta + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 5 + + + apps/client/src/app/pages/account/account-page.html + 116 + + + + Time to add your first activity. + Tijd om uw eerste activiteit toe te voegen. + + libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html + 12 + + + + Language + Taal + + apps/client/src/app/pages/account/account-page.html + 115 + + + + Data Management + Gegevensbeheer + + apps/client/src/app/components/admin-overview/admin-overview.html + 20 + + + + Get started + Aan de slag + + apps/client/src/app/components/header/header.component.html + 297 + + + + This feature is currently unavailable. + Deze functie is momenteel niet beschikbaar. + + apps/client/src/app/core/http-response.interceptor.ts + 59 + + + + Oops! Something went wrong. + Oeps! Er ging iets mis. + + apps/client/src/app/core/http-response.interceptor.ts + 86 + + + + Please try again later. + Probeer het later nog eens. + + apps/client/src/app/core/http-response.interceptor.ts + 61 + + + apps/client/src/app/core/http-response.interceptor.ts + 88 + + + + Change + Verandering + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 44 + + + + Developed Markets + Ontwikkelde markten + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 256 + + + apps/client/src/app/pages/public/public-page.html + 90 + + + + Asset Sub Class + Activa Subklasse + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 51 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 154 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 169,171 + + + + Average Unit Price + Gemiddelde prijs per eenheid + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 65 + + + + Maximum Price + Maximale prijs + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 97 + + + + Other Markets + Andere markten + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 274 + + + apps/client/src/app/pages/public/public-page.html + 108 + + + + Emerging Markets + Opkomende markten + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 265 + + + apps/client/src/app/pages/public/public-page.html + 99 + + + + Sector + Sector + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 169 + + + + Country + Land + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 181 + + + + Minimum Price + Minimale prijs + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 86 + + + + First Buy Date + Eerste aankoopdatum + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 127 + + + + Transactions + Transacties + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 136 + + + + Projected Total Amount + Verwacht totaalbedrag + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 44 + + + + Savings + Besparingen + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 296 + + + + Accumulating + Accumuleren + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 39 + + + + Initial + Aanvankelijk + + apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts + 57 + + + + Interest + Rente + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 286 + + + + Deposit + Storting + + apps/client/src/app/components/investment-chart/investment-chart.component.ts + 132 + + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 276 + + + + Current + Huidige + + apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts + 58 + + + + Monthly + Maandelijks + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 38 + + + + Sectors Count + Sectoren tellen + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 96 + + + + Countries Count + Landen Telling + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 87 + + + + Fear + Angst + + apps/client/src/app/components/home-market/home-market.component.ts + 24 + + + + Greed + Hebzucht + + apps/client/src/app/components/home-market/home-market.component.ts + 25 + + + + Filter by account or tag... + Filter op account of tag... + + apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts + 136 + + + apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts + 87 + + + + Filter by... + Filter op... + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 128 + + + + Filter by account, currency, symbol or type... + Filter op rekening, valuta, symbool of type... + + libs/ui/src/lib/activities-table/activities-table.component.ts + 291 + + + + Hello, has shared a Portfolio with you! + Hallo, heeft een Portefeuille met u gedeeld! + + apps/client/src/app/pages/public/public-page.html + 4,7 + + + + Alias + Alias + + apps/client/src/app/components/access-table/access-table.component.html + 3 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 6 + + + + Experimental Features + Experimentele functies + + apps/client/src/app/pages/account/account-page.html + 196 + + + + Benchmark + Benchmark + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts + 120 + + + + Benchmarks + Benchmarks + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 4 + + + + Compare with... + Vergelijk met... + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 14 + + + + Proportion of Net Worth + Verhouding van nettowaarde + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 17 + + + + + diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 693e2183b..790fb8ac0 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -1,7 +1,7 @@ import * as currencies from '@dinero.js/currencies'; import { DataSource } from '@prisma/client'; import { getDate, getMonth, getYear, parse, subDays } from 'date-fns'; -import { de, it } from 'date-fns/locale'; +import { de, it, nl } from 'date-fns/locale'; import { ghostfolioScraperApiSymbolPrefix, locale } from './config'; import { Benchmark } from './interfaces'; @@ -77,6 +77,8 @@ export function getDateFnsLocale(aLanguageCode: string) { return de; } else if (aLanguageCode === 'it') { return it; + } else if (aLanguageCode === 'nl') { + return nl; } return undefined; From 333b63bfe22fae0c80208b511b7c891404064bb8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 25 Sep 2022 21:46:19 +0200 Subject: [PATCH 13/29] Release 1.198.0 (#1294) --- CHANGELOG.md | 3 ++- package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fd6c7129..e54a1f590 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.198.0 - 25.09.2022 ### Added - Added support to exclude an account from analysis +- Set up the language localization for Nederlands (`nl`) ## 1.197.0 - 24.09.2022 diff --git a/package.json b/package.json index a11af30b0..88bf4b784 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.197.0", + "version": "1.198.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From 76ceac4edcf4b9a1dbc4c0c4192d5b8543e024f9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 26 Sep 2022 18:14:53 +0200 Subject: [PATCH 14/29] Add spanish translation (#1296) Co-Authored-By: alfredonodo <41476198+alfredonodo@users.noreply.github.com> Co-Authored-By: casitu <25199636+casitu@users.noreply.github.com> --- apps/client/src/locales/messages.es.xlf | 2651 +++++++++++++++++++++++ 1 file changed, 2651 insertions(+) create mode 100644 apps/client/src/locales/messages.es.xlf diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf new file mode 100644 index 000000000..bb9014825 --- /dev/null +++ b/apps/client/src/locales/messages.es.xlf @@ -0,0 +1,2651 @@ + + + + + + Create Account + Crear una cuenta + + apps/client/src/app/pages/register/register-page.html + 27,29 + + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 2 + + + + The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. + El riesgo de pérdida en trading puede ser importante. No es aconsejable invertir dinero que puedas necesitar a corto plazo. + + apps/client/src/app/app.component.html + 55,56 + + + + Grantee + Beneficiario + + apps/client/src/app/components/access-table/access-table.component.html + 10 + + + + Type + Tipo + + apps/client/src/app/components/access-table/access-table.component.html + 17 + + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 28 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 13 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 12,14 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 52 + + + + Details + Detalles + + apps/client/src/app/components/access-table/access-table.component.html + 27 + + + + Revoke + Revoca + + apps/client/src/app/components/access-table/access-table.component.html + 54 + + + + Do you really want to revoke this granted access? + ¿Quieres revocar el acceso concedido? + + apps/client/src/app/components/access-table/access-table.component.ts + 49 + + + + Activities + Operaciones + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 33 + + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 58 + + + apps/client/src/app/components/admin-users/admin-users.html + 17 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 214 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 24 + + + apps/client/src/app/pages/portfolio/transactions/transactions-page.html + 4,7 + + + + Name + Nombre + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 3 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 36 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 7 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 70,72 + + + + Total + Total + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 18 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 47 + + + + Value + Valor + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 110 + + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 144 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 52 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 221 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 256 + + + + Edit + Edita + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 186 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 365 + + + + Delete + Elimina + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 194 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 132 + + + apps/client/src/app/components/admin-users/admin-users.html + 87 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 381 + + + + Do you really want to delete this account? + ¿Estás seguro de eliminar esta cuenta? + + apps/client/src/app/components/accounts-table/accounts-table.component.ts + 73 + + + + Delete Jobs + Elimina los trabajos + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 21 + + + + Symbol + Símbolo + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 29 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 24 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 22 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 84 + + + + Data Source + Fuente de datos + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 30 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 33 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 86,88 + + + + Attempts + Intentos + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31 + + + + Created + Creado + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 32 + + + + Finished + Finalizado + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 33 + + + + Status + Estado + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 34 + + + + Asset Profile + Perfil del activo + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 49 + + + + Historical Market Data + Datos históricos del mercado + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 54 + + + + View Data + Visualiza los datos + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 109 + + + + View Stacktrace + Visualiza Stacktrace + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 116 + + + + Delete Job + Elimina el trabajo + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 119 + + + + Details for + Detalles para + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 2 + + + + Date + Fecha + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 6 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 92,93 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 40 + + + + Market Price + Precio de mercado + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 26 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 75 + + + + Cancel + Cancela + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 45 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 66 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 201,205 + + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 37 + + + + Save + Guarda + + apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html + 47 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 73 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 208,213 + + + + First Activity + Primera actividad + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 60 + + + + Activity Count + Recuento de actividad + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 69 + + + apps/client/src/app/components/admin-overview/admin-overview.html + 11 + + + + Historical Data + Datos históricos + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 78 + + + + Gather Data + Recoger datos + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 119 + + + + Please add a currency: + Por favor, añade una divisa: + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 106 + + + + Do you really want to delete this coupon? + ¿Estás seguro de eliminar este cupón? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 120 + + + + Do you really want to delete this currency? + ¿Estás seguro de eliminar esta divisa? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 133 + + + + Do you really want to flush the cache? + ¿Estás seguro de limpiar la caché? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 150 + + + + Please set your system message: + Por favor, establece tu mensaje del sistema: + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 199 + + + + User Count + Número de usuarios + + apps/client/src/app/components/admin-overview/admin-overview.html + 7 + + + + per User + por usario + + apps/client/src/app/components/admin-overview/admin-overview.html + 15 + + + + Gather Recent Data + Recoger datos recientes + + apps/client/src/app/components/admin-overview/admin-overview.html + 33 + + + + Gather All Data + Recoger todos los datos + + apps/client/src/app/components/admin-overview/admin-overview.html + 46 + + + + Gather Profile Data + Recoger los datos del perfil + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 125 + + + apps/client/src/app/components/admin-overview/admin-overview.html + 60 + + + + Exchange Rates + Tipos de cambio + + apps/client/src/app/components/admin-overview/admin-overview.html + 67 + + + + Add Currency + Añadir divisa + + apps/client/src/app/components/admin-overview/admin-overview.html + 106 + + + + System Message + Mensaje del sistema + + apps/client/src/app/components/admin-overview/admin-overview.html + 112 + + + + Set Message + Establecer mensaje + + apps/client/src/app/components/admin-overview/admin-overview.html + 134 + + + + Read-only Mode + Modo de solo lectura + + apps/client/src/app/components/admin-overview/admin-overview.html + 139 + + + + Coupons + Cupones + + apps/client/src/app/components/admin-overview/admin-overview.html + 152 + + + + Add + Añadir + + apps/client/src/app/components/admin-overview/admin-overview.html + 183 + + + + Housekeeping + Tareas domésticas + + apps/client/src/app/components/admin-overview/admin-overview.html + 190 + + + + Flush Cache + Limpiar caché + + apps/client/src/app/components/admin-overview/admin-overview.html + 194 + + + + Do you really want to delete this user? + ¿Estás seguro de eliminar este usuario? + + apps/client/src/app/components/admin-users/admin-users.component.ts + 59 + + + + User + Usuario + + apps/client/src/app/components/admin-users/admin-users.html + 9 + + + apps/client/src/app/components/header/header.component.html + 145 + + + + Registration + Registro + + apps/client/src/app/components/admin-users/admin-users.html + 11 + + + + Engagement per Day + Contratación diaria + + apps/client/src/app/components/admin-users/admin-users.html + 20 + + + + Last Request + Última petición + + apps/client/src/app/components/admin-users/admin-users.html + 22 + + + + Current Market Mood + Estado de ánimo del mercado + + apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html + 12 + + + + Overview + Visión general + + apps/client/src/app/components/header/header.component.html + 21 + + + apps/client/src/app/components/header/header.component.html + 157 + + + + Portfolio + Cartera + + apps/client/src/app/components/header/header.component.html + 32 + + + apps/client/src/app/components/header/header.component.html + 167 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 2 + + + + Accounts + Cuentas + + apps/client/src/app/components/admin-users/admin-users.html + 14 + + + apps/client/src/app/components/header/header.component.html + 43 + + + apps/client/src/app/components/header/header.component.html + 175 + + + apps/client/src/app/pages/accounts/accounts-page.html + 4 + + + + Admin Control + Control de administrador + + apps/client/src/app/components/header/header.component.html + 55 + + + apps/client/src/app/components/header/header.component.html + 192 + + + + Resources + Recursos + + apps/client/src/app/components/header/header.component.html + 66 + + + apps/client/src/app/components/header/header.component.html + 203 + + + apps/client/src/app/pages/resources/resources-page.html + 4 + + + + Pricing + Precios + + apps/client/src/app/components/header/header.component.html + 80 + + + apps/client/src/app/components/header/header.component.html + 214 + + + apps/client/src/app/components/header/header.component.html + 268 + + + + About + Sobre + + apps/client/src/app/components/header/header.component.html + 91 + + + apps/client/src/app/components/header/header.component.html + 257 + + + + Me + + + apps/client/src/app/components/header/header.component.html + 127 + + + + My Ghostfolio + Mi Ghostfolio + + apps/client/src/app/components/header/header.component.html + 183 + + + + About Ghostfolio + Sobre Ghostfolio + + apps/client/src/app/components/header/header.component.html + 222 + + + + Features + Funcionalidades + + apps/client/src/app/components/header/header.component.html + 246 + + + + Markets + Mercados + + apps/client/src/app/components/header/header.component.html + 280 + + + apps/client/src/app/components/home-market/home-market.html + 2 + + + + Get Started + Empezar + + apps/client/src/app/pages/public/public-page.html + 137 + + + + Sign in + Iniciar sesión + + apps/client/src/app/components/header/header.component.ts + 112 + + + apps/client/src/app/pages/webauthn/webauthn-page-routing.module.ts + 6 + + + + Oops! Incorrect Security Token. + Vaya! Token de seguridad incorrecto. + + apps/client/src/app/components/header/header.component.ts + 126 + + + + Manage Activities + Gestión de las operaciones + + apps/client/src/app/components/home-holdings/home-holdings.html + 30 + + + apps/client/src/app/pages/portfolio/holdings/holdings-page.html + 31 + + + + Last Days + Últimos días + + apps/client/src/app/components/home-market/home-market.html + 6 + + + + Summary + Resumen + + apps/client/src/app/components/home-summary/home-summary.html + 6 + + + + Security Token + Token de seguridad + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 10,14 + + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 10 + + + + or + o + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 20,22 + + + apps/client/src/app/pages/register/register-page.html + 31,33 + + + apps/client/src/app/pages/webauthn/webauthn-page.html + 28 + + + + Sign in with Internet Identity + Iniciar sesión con Internet Identity + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 30,32 + + + + Sign in with Google + Iniciar sesión con Google + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 37,43 + + + + Stay signed in + Seguir conectado + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 46,52 + + + + Sign in + Iniciar sesión + + apps/client/src/app/components/header/header.component.html + 289 + + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 56,60 + + + + Time in Market + Tiempo en el mercado + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 3 + + + + Buy + Compra + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 12 + + + + Sell + Venta + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 23 + + + + Investment + Inversión + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 40 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 117 + + + + Absolute Gross Performance + Rendimiento bruto absoluto + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 51 + + + + Gross Performance (TWR) + Rendimiento bruto (TWR) + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 62 + + + + Fees for + Comisiones por + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 77,80 + + + + {VAR_PLURAL, plural, =1 {transaction} other {transactions}} + {VAR_PLURAL, plural, =1 {transaction} otras {transactions}} + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 78,79 + + + + Absolute Net Performance + Rendimiento neto absoluto + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 95 + + + + Net Performance (TWR) + Rendimiento neto (TWR) + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 106 + + + + Total Assets + Total de activos + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 122 + + + + Valuables + Objetos de valor + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 134 + + + + Emergency Fund + Fondo de emergencia + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 145 + + + + Buying Power + Capacidad de compra + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 165 + + + + Net Worth + Patrimonio neto + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 179 + + + + Annualized Performance + Rendimiento anualizado + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 190 + + + + Dividend + Dividendo + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 206 + + + + Please enter the amount of your emergency fund: + Por favor, ingresa la cantidad de tu fondo de emergencia: + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts + 52 + + + + Sectors + Sectores + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 187 + + + apps/client/src/app/pages/public/public-page.html + 45 + + + + Countries + Países + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 198 + + + + Tags + Etiquetas + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 234 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 184,186 + + + + Report Data Glitch + Reporta un anomalía de los datos + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 249 + + + + Allocation + Distribución + + apps/client/src/app/components/positions-table/positions-table.component.html + 72 + + + + Performance + Rendimiento + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 55 + + + apps/client/src/app/components/positions-table/positions-table.component.html + 91 + + + + Show all + Mostrar todos + + apps/client/src/app/components/positions-table/positions-table.component.html + 137 + + + + Today + Hoy + + apps/client/src/app/components/toggle/toggle.component.ts + 21 + + + + YTD + Desde principio de año + + apps/client/src/app/components/toggle/toggle.component.ts + 22 + + + + 1Y + 1 año + + apps/client/src/app/components/toggle/toggle.component.ts + 23 + + + + 5Y + 5 años + + apps/client/src/app/components/toggle/toggle.component.ts + 24 + + + + Max + Máximo + + apps/client/src/app/components/toggle/toggle.component.ts + 25 + + + + This feature requires a subscription. + Esta funcionalidad requiere de suscripción. + + apps/client/src/app/core/http-response.interceptor.ts + 67 + + + + Upgrade Plan + Mejorar plan + + apps/client/src/app/core/http-response.interceptor.ts + 69 + + + + Okay + De acuerdo + + apps/client/src/app/core/http-response.interceptor.ts + 89 + + + + About + Sobre + + apps/client/src/app/pages/about/about-page-routing.module.ts + 12 + + + + Privacy Policy + Política de privacidad + + apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html + 4 + + + + Blog + Blog + + apps/client/src/app/pages/blog/blog-page.html + 4 + + + + Changelog & License + Registro de cambios & Licencia de uso + + apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts + 12 + + + + Changelog + Registro de cambios + + apps/client/src/app/pages/about/changelog/changelog-page.html + 4 + + + + License + Licencia de uso + + apps/client/src/app/pages/about/changelog/changelog-page.html + 15 + + + + Privacy Policy + Política de privacidad + + apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts + 12 + + + + My Ghostfolio + Mi Ghostfolio + + apps/client/src/app/pages/account/account-page-routing.module.ts + 12 + + + + Please enter your coupon code: + Por favor, ingresa tu código de cupón: + + apps/client/src/app/pages/account/account-page.component.ts + 225 + + + + Could not redeem coupon code + No se puede canjear este código de cupón + + apps/client/src/app/pages/account/account-page.component.ts + 235 + + + + Coupon code has been redeemed + El codigo de cupón ha sido canjeado + + apps/client/src/app/pages/account/account-page.component.ts + 247 + + + + Reload + Refrescar + + apps/client/src/app/pages/account/account-page.component.ts + 248 + + + + Do you really want to remove this sign in method? + ¿Estás seguro de eliminar este método de acceso? + + apps/client/src/app/pages/account/account-page.component.ts + 294 + + + + Account + Cuenta + + apps/client/src/app/pages/account/account-page.html + 4 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 25,27 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 282 + + + + Membership + Suscripción + + apps/client/src/app/pages/account/account-page.html + 15 + + + + Upgrade + Mejorar + + apps/client/src/app/pages/account/account-page.html + 37 + + + + per year + por año + + apps/client/src/app/pages/account/account-page.html + 48 + + + + Try Premium + Prueba Premium + + apps/client/src/app/pages/account/account-page.html + 56 + + + + Redeem Coupon + Canjea el cupón + + apps/client/src/app/pages/account/account-page.html + 68 + + + + Presenter View + Vista del presentador + + apps/client/src/app/pages/account/account-page.html + 75 + + + + Hides sensitive values such as absolute performances and quantities. + Esconde valores sensibles como los rendimientos absolutos y las cantidades. + + apps/client/src/app/pages/account/account-page.html + 76,79 + + + + Base Currency + Divisa base + + apps/client/src/app/pages/account/account-page.html + 94 + + + + Locale + Ubicación + + apps/client/src/app/pages/account/account-page.html + 135 + + + + Date and number format + Formato de fecha y número + + apps/client/src/app/pages/account/account-page.html + 137 + + + + View Mode + Modo de visualización + + apps/client/src/app/pages/account/account-page.html + 160 + + + + Sign in with fingerprint + Accede con huella digital + + apps/client/src/app/pages/account/account-page.html + 181 + + + + User ID + ID usuario + + apps/client/src/app/pages/account/account-page.html + 208 + + + + Granted Access + Acceso concedido + + apps/client/src/app/pages/account/account-page.html + 217 + + + + Grant access + Conceder acceso + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 2 + + + + Public + Público + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 19 + + + + Accounts + Cuentas + + apps/client/src/app/pages/accounts/accounts-page-routing.module.ts + 12 + + + + Update account + Mejorar cuenta + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 2 + + + + Add account + Añadir cuenta + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 3 + + + + Cash + Efectivo + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 15 + + + + Securities + Valores + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 16 + + + + Currency + Divisa base + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 23 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 22 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 76,77 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 109 + + + + Cash Balance + Saldo en efectivo + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 76 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 32 + + + + Platform + Plataforma + + apps/client/src/app/components/accounts-table/accounts-table.component.html + 35 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 44 + + + + Account ID + ID cuenta + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 55 + + + + Admin Control + Control de administrador + + apps/client/src/app/pages/admin/admin-page-routing.module.ts + 23 + + + + Blog + Blog + + apps/client/src/app/pages/blog/blog-page-routing.module.ts + 12 + + + + As you are already logged in, you cannot access the demo account. + Como estás conectado, no puedes acceder a la cuenta de demostración. + + apps/client/src/app/pages/demo/demo-page.component.ts + 31 + + + + FAQ + FAQ + + apps/client/src/app/pages/faq/faq-page-routing.module.ts + 12 + + + + Features + Funcionalidades + + apps/client/src/app/pages/features/features-page-routing.module.ts + 12 + + + + Overview + Visión general + + apps/client/src/app/pages/home/home-page-routing.module.ts + 23 + + + apps/client/src/app/pages/zen/zen-page-routing.module.ts + 19 + + + + Markets + Mercados + + apps/client/src/app/pages/markets/markets-page-routing.module.ts + 12 + + + + Allocations + Distribución + + apps/client/src/app/pages/portfolio/allocations/allocations-page-routing.module.ts + 12 + + + + Allocations + Distribución + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 4 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 44 + + + + By Account + Por cuenta + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 33 + + + + By Currency + Por divisa + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 58 + + + + By Asset Class + Por tipo de activo + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 86 + + + + By Holding + Por participación + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 114 + + + + By Sector + Por sector + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 142 + + + + By Continent + Por continente + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 171 + + + + By Country + Por país + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 199 + + + + Regions + Regiones + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 230 + + + apps/client/src/app/pages/public/public-page.html + 76 + + + + Analysis + Análisis + + apps/client/src/app/pages/portfolio/analysis/analysis-page-routing.module.ts + 12 + + + + Analysis + Análisis + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 2 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 69 + + + + Investment Timeline + Cronología de la inversión + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 105 + + + + Top + Lo mejor + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 26 + + + + Bottom + Lo peor + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 62 + + + + FIRE + FIRE + + apps/client/src/app/pages/portfolio/fire/fire-page-routing.module.ts + 12 + + + + FIRE + FIRE + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 4 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 115 + + + + Calculator + Calculadora + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 6 + + + + 4% Rule + Regla del 4% + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 20 + + + + Holdings + Participaciones + + apps/client/src/app/pages/portfolio/holdings/holdings-page-routing.module.ts + 12 + + + + Holdings + Participaciones + + apps/client/src/app/pages/portfolio/holdings/holdings-page.html + 4 + + + apps/client/src/app/pages/portfolio/portfolio-page.html + 6 + + + apps/client/src/app/pages/public/public-page.html + 14 + + + + Get an overview of your current holdings. + Obtén una visión general de tus participaciones actuales. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 7,9 + + + + Open Holdings + Abrir participaciones + + apps/client/src/app/pages/portfolio/portfolio-page.html + 16 + + + + Manage your activities: stocks, ETFs, cryptocurrencies, dividend, and valuables. + Gestiona tus operaciones: acciones, ETFs, criptomonedas, dividendos y objetos de valor. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 25,28 + + + + Open Activities + Abrir operaciones + + apps/client/src/app/pages/portfolio/portfolio-page.html + 35 + + + + Check the allocations of your portfolio by account, asset class, currency, sector and region. + Controla la distribución de tu cartera por cuenta, tipo de activo, divisa, sector y región. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 50,53 + + + + Open Allocations + Abrir distribución + + apps/client/src/app/pages/portfolio/portfolio-page.html + 60 + + + + Ghostfolio Analysis visualizes your portfolio and shows your top and bottom performers. + Ghostfolio Analysis visualiza tu cartera y te muestra los mejores y peores resultados. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 75,78 + + + + Open Analysis + Abrir análisis + + apps/client/src/app/pages/portfolio/portfolio-page.html + 85 + + + + Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. + Ghostfolio X-ray usa el análisis estático para identificar posibles problemas o riesgos en tu cartera. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 100,103 + + + + Open X-ray + Abrir X-ray + + apps/client/src/app/pages/portfolio/portfolio-page.html + 106 + + + + Ghostfolio FIRE calculates metrics for the Financial Independence, Retire Early lifestyle. + Ghostfolio FIRE realiza mediciones para alcanzar la independencia financiera y la jubilación anticipada. + + apps/client/src/app/pages/portfolio/portfolio-page.html + 121,124 + + + + Open FIRE + Abrir FIRE + + apps/client/src/app/pages/portfolio/portfolio-page.html + 127 + + + + Update activity + Actualizar opereación + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 7,8 + + + + Add activity + Añadir operación + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 8,11 + + + + BUY + COMPRA + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 14,15 + + + + DIVIDEND + DIVIDENDO + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 15,17 + + + + ITEM + ARTÍCULO + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 16,18 + + + + SELL + VENTA + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 17,21 + + + + Name, symbol or ISIN + Nombre, símbolo o ISIN + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 37,40 + + + + Quantity + Cantidad + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 106,107 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 130 + + + + Unit Price + Precio unitario + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 112,113 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 159 + + + + Fee + Comisión + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 131,132 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 188 + + + + Note + Nota + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 140,143 + + + + Asset Class + Tipo de activo + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 42 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 145 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 154,156 + + + + Activities + Operación + + apps/client/src/app/pages/portfolio/transactions/transactions-page-routing.module.ts + 12 + + + + Importing data... + Importando datos... + + apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts + 191 + + + + Import has been completed + La importación se ha completado + + apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts + 337 + + + + Pricing + Precios + + apps/client/src/app/pages/pricing/pricing-page-routing.module.ts + 12 + + + + Portfolio + Cartera + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts + 111 + + + apps/client/src/app/pages/public/public-page-routing.module.ts + 12 + + + + Currencies + Divisas + + apps/client/src/app/pages/public/public-page.html + 30 + + + + Continents + Continentes + + apps/client/src/app/pages/public/public-page.html + 60 + + + + Ghostfolio empowers you to keep track of your wealth. + Ghostfolio te permite hacer un seguimiento de tu riqueza. + + apps/client/src/app/pages/public/public-page.html + 132,134 + + + + Registration + Registro + + apps/client/src/app/pages/register/register-page-routing.module.ts + 12 + + + + Continue with Internet Identity + Continuar con Internet Identity + + apps/client/src/app/pages/register/register-page.html + 41,43 + + + + Continue with Google + Continuar con Google + + apps/client/src/app/pages/register/register-page.html + 48,53 + + + + Copy to clipboard + Copiar al portapapeles + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 26 + + + + I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. + Confirmo haber guardado mi Token de seguridad mostrado arriba en un lugar seguro. Si lo pierdo, no podré recuperar mi cuenta. + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 31,34 + + + + Agree and continue + Aceptar y continuar + + apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html + 44 + + + + Resources + Recursos + + apps/client/src/app/pages/resources/resources-page-routing.module.ts + 12 + + + + Oops, authentication has failed. + Vaya, la autenticación ha fallado. + + apps/client/src/app/pages/webauthn/webauthn-page.html + 18 + + + + Try again + Prueba otra vez + + apps/client/src/app/pages/webauthn/webauthn-page.html + 26 + + + + Go back to Home Page + Volver a la página principal + + apps/client/src/app/pages/webauthn/webauthn-page.html + 30 + + + + Draft + Borrador + + libs/ui/src/lib/activities-table/activities-table.component.html + 95 + + + + Import Activities + Importar operaciones + + libs/ui/src/lib/activities-table/activities-table.component.html + 319 + + + + Export Activities + Exportar operaciones + + libs/ui/src/lib/activities-table/activities-table.component.html + 329 + + + + Export Drafts as ICS + Exportar borrador como ICS + + libs/ui/src/lib/activities-table/activities-table.component.html + 339 + + + + Clone + Clonar + + libs/ui/src/lib/activities-table/activities-table.component.html + 369 + + + + Export Draft as ICS + Exportar borrador como ICS + + libs/ui/src/lib/activities-table/activities-table.component.html + 377 + + + + Do you really want to delete this activity? + ¿Estás seguro de eliminar esta operación? + + libs/ui/src/lib/activities-table/activities-table.component.ts + 134 + + + + Index + Índice + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + + + + Change from All Time High + Variación respecto al máximo histórico (ATH) + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + + + + from ATH + desde el máximo histórico (ATH) + + libs/ui/src/lib/benchmark/benchmark.component.html + 14 + + + + Savings Rate + Tasa de ahorro + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 10 + + + + per month + por mes + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 17 + + + + Investment Horizon + Horizonte de inversión + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 21 + + + + years + años + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 23 + + + + Annual Interest Rate + Tipo de interés anual + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 27 + + + + Beta + Beta + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 5 + + + apps/client/src/app/pages/account/account-page.html + 116 + + + + Time to add your first activity. + Es momento de añadir tu primera operación. + + libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html + 12 + + + + Language + Idioma + + apps/client/src/app/pages/account/account-page.html + 115 + + + + Data Management + Gestión de los datos + + apps/client/src/app/components/admin-overview/admin-overview.html + 20 + + + + Get started + Comenzar + + apps/client/src/app/components/header/header.component.html + 297 + + + + This feature is currently unavailable. + Esta funcionalidad no está disponible actualmente. + + apps/client/src/app/core/http-response.interceptor.ts + 59 + + + + Oops! Something went wrong. + Vaya! Algo no funcionó bien. + + apps/client/src/app/core/http-response.interceptor.ts + 86 + + + + Please try again later. + Por favor, prueba más tarde. + + apps/client/src/app/core/http-response.interceptor.ts + 61 + + + apps/client/src/app/core/http-response.interceptor.ts + 88 + + + + Change + Modificar + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 44 + + + + Developed Markets + Mercados desarrollados + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 256 + + + apps/client/src/app/pages/public/public-page.html + 90 + + + + Asset Sub Class + Subtipo de activo + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 51 + + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 154 + + + apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html + 169,171 + + + + Average Unit Price + Precio unitario medio + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 65 + + + + Maximum Price + Precio máximo + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 97 + + + + Other Markets + Otros mercados + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 274 + + + apps/client/src/app/pages/public/public-page.html + 108 + + + + Emerging Markets + Mercados emergentes + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 265 + + + apps/client/src/app/pages/public/public-page.html + 99 + + + + Sector + Sector + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 169 + + + + Country + País + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 181 + + + + Minimum Price + Precio mínimo + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 86 + + + + First Buy Date + Fecha de la primera compra + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 127 + + + + Transactions + Transacciones + + apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html + 136 + + + + Projected Total Amount + Importe total previsto + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 44 + + + + Savings + Ahorros + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 296 + + + + Accumulating + Acumulando + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 39 + + + + Initial + Inicial + + apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts + 57 + + + + Interest + Interés + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 286 + + + + Deposit + Depósito + + apps/client/src/app/components/investment-chart/investment-chart.component.ts + 132 + + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 276 + + + + Current + Actual + + apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts + 58 + + + + Monthly + Mensual + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 38 + + + + Sectors Count + Número de sectores + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 96 + + + + Countries Count + Número de países + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 87 + + + + Fear + Miedo + + apps/client/src/app/components/home-market/home-market.component.ts + 24 + + + + Greed + Codicia + + apps/client/src/app/components/home-market/home-market.component.ts + 25 + + + + Filter by account or tag... + Filtrar por cuenta o etiqueta... + + apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts + 136 + + + apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts + 87 + + + + Filter by... + Filtrar por... + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 128 + + + + Filter by account, currency, symbol or type... + Filtrar por cuenta, divisa, símbolo o tipo... + + libs/ui/src/lib/activities-table/activities-table.component.ts + 291 + + + + Hello, has shared a Portfolio with you! + Hola, ha compartido una Cartera contigo! + + apps/client/src/app/pages/public/public-page.html + 4,7 + + + + Alias + Alias + + apps/client/src/app/components/access-table/access-table.component.html + 3 + + + apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + 6 + + + + Experimental Features + Funcionalidades experimentales + + apps/client/src/app/pages/account/account-page.html + 196 + + + + Benchmark + Benchmark + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts + 120 + + + + Benchmarks + Benchmark + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 4 + + + + Compare with... + Comparar con... + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 14 + + + + Proportion of Net Worth + Porcentaje del patrimonio neto + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 17 + + + + + From e3916e1ba38e438097e2a6f7e5a08f0e2eeb878a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 26 Sep 2022 18:39:11 +0200 Subject: [PATCH 15/29] Feature/setup espanol (#1293) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Setup Español * Update changelog --- CHANGELOG.md | 6 ++++++ angular.json | 12 ++++++++++++ apps/api/src/app/frontend.middleware.ts | 14 ++++++++++++++ .../app/pages/account/account-page.component.ts | 2 +- .../client/src/app/pages/account/account-page.html | 1 + .../src/app/pages/features/features-page.html | 4 ++-- libs/common/src/lib/helper.ts | 4 +++- 7 files changed, 39 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e54a1f590..4f89a0d83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Set up the language localization for Español (`es`) + ## 1.198.0 - 25.09.2022 ### Added diff --git a/angular.json b/angular.json index 991e64c89..1ceea18c1 100644 --- a/angular.json +++ b/angular.json @@ -136,6 +136,10 @@ "baseHref": "/en/", "localize": ["en"] }, + "development-es": { + "baseHref": "/es/", + "localize": ["es"] + }, "development-it": { "baseHref": "/it/", "localize": ["it"] @@ -188,6 +192,9 @@ "development-en": { "browserTarget": "client:build:development-en" }, + "development-es": { + "browserTarget": "client:build:development-es" + }, "development-it": { "browserTarget": "client:build:development-it" }, @@ -207,6 +214,7 @@ "outputPath": "src/locales", "targetFiles": [ "messages.de.xlf", + "messages.es.xlf", "messages.it.xlf", "messages.nl.xlf" ] @@ -233,6 +241,10 @@ "baseHref": "/de/", "translation": "apps/client/src/locales/messages.de.xlf" }, + "es": { + "baseHref": "/es/", + "translation": "apps/client/src/locales/messages.es.xlf" + }, "it": { "baseHref": "/it/", "translation": "apps/client/src/locales/messages.it.xlf" diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts index 876287db4..c49560c3a 100644 --- a/apps/api/src/app/frontend.middleware.ts +++ b/apps/api/src/app/frontend.middleware.ts @@ -11,6 +11,7 @@ import { NextFunction, Request, Response } from 'express'; export class FrontendMiddleware implements NestMiddleware { public indexHtmlDe = ''; public indexHtmlEn = ''; + public indexHtmlEs = ''; public indexHtmlIt = ''; public indexHtmlNl = ''; public isProduction: boolean; @@ -34,6 +35,10 @@ export class FrontendMiddleware implements NestMiddleware { this.getPathOfIndexHtmlFile(DEFAULT_LANGUAGE_CODE), 'utf8' ); + this.indexHtmlEs = fs.readFileSync( + this.getPathOfIndexHtmlFile('es'), + 'utf8' + ); this.indexHtmlIt = fs.readFileSync( this.getPathOfIndexHtmlFile('it'), 'utf8' @@ -71,6 +76,15 @@ export class FrontendMiddleware implements NestMiddleware { rootUrl: this.configurationService.get('ROOT_URL') }) ); + } else if (req.path === '/es' || req.path.startsWith('/es/')) { + res.send( + this.interpolate(this.indexHtmlIt, { + featureGraphicPath, + languageCode: 'es', + path: req.path, + rootUrl: this.configurationService.get('ROOT_URL') + }) + ); } else if (req.path === '/it' || req.path.startsWith('/it/')) { res.send( this.interpolate(this.indexHtmlIt, { diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index fee2b2358..f741058a9 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -54,7 +54,7 @@ export class AccountPageComponent implements OnDestroy, OnInit { public hasPermissionToUpdateViewMode: boolean; public hasPermissionToUpdateUserSettings: boolean; public language = document.documentElement.lang; - public locales = ['de', 'de-CH', 'en-GB', 'en-US', 'it', 'nl']; + public locales = ['de', 'de-CH', 'en-GB', 'en-US', 'es', 'it', 'nl']; public price: number; public priceId: string; public snackBarRef: MatSnackBarRef; diff --git a/apps/client/src/app/pages/account/account-page.html b/apps/client/src/app/pages/account/account-page.html index aa0983d15..e3c446f57 100644 --- a/apps/client/src/app/pages/account/account-page.html +++ b/apps/client/src/app/pages/account/account-page.html @@ -132,6 +132,7 @@ Deutsch English + Español Italiano Nederlands diff --git a/apps/client/src/app/pages/features/features-page.html b/apps/client/src/app/pages/features/features-page.html index d1a57f6b3..8dc184326 100644 --- a/apps/client/src/app/pages/features/features-page.html +++ b/apps/client/src/app/pages/features/features-page.html @@ -197,8 +197,8 @@

Multi-Language

- Use Ghostfolio in multiple languages: English, German and - Italian are currently supported. + Use Ghostfolio in multiple languages: English, Dutch, German, + Italian and Spanish are currently supported.

diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 790fb8ac0..df0d51900 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -1,7 +1,7 @@ import * as currencies from '@dinero.js/currencies'; import { DataSource } from '@prisma/client'; import { getDate, getMonth, getYear, parse, subDays } from 'date-fns'; -import { de, it, nl } from 'date-fns/locale'; +import { de, es, it, nl } from 'date-fns/locale'; import { ghostfolioScraperApiSymbolPrefix, locale } from './config'; import { Benchmark } from './interfaces'; @@ -75,6 +75,8 @@ export function getCssVariable(aCssVariable: string) { export function getDateFnsLocale(aLanguageCode: string) { if (aLanguageCode === 'de') { return de; + } else if (aLanguageCode === 'es') { + return es; } else if (aLanguageCode === 'it') { return it; } else if (aLanguageCode === 'nl') { From 3715edd9ba70cb702b250ff057644254146fe3d0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 26 Sep 2022 19:44:19 +0200 Subject: [PATCH 16/29] Extract locales (#1297) --- apps/client/src/locales/messages.de.xlf | 122 +++++++++++-------- apps/client/src/locales/messages.es.xlf | 124 ++++++++++++-------- apps/client/src/locales/messages.it.xlf | 150 ++++++++++++++---------- apps/client/src/locales/messages.nl.xlf | 132 +++++++++++++-------- apps/client/src/locales/messages.xlf | 122 +++++++++++-------- 5 files changed, 394 insertions(+), 256 deletions(-) diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 9289a3a75..cf3dfa6a9 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -38,7 +38,7 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html - 28 + 31 apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -86,7 +86,7 @@ Aktivitäten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 33 + 35 apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -210,7 +210,7 @@ Jobs löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 21 + 24 @@ -218,7 +218,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 29 + 32 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -238,7 +238,7 @@ Datenquelle apps/client/src/app/components/admin-jobs/admin-jobs.html - 30 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -254,7 +254,7 @@ Versuche apps/client/src/app/components/admin-jobs/admin-jobs.html - 31 + 34 @@ -262,7 +262,7 @@ Erstellt apps/client/src/app/components/admin-jobs/admin-jobs.html - 32 + 35 @@ -270,7 +270,7 @@ Abgeschlossen apps/client/src/app/components/admin-jobs/admin-jobs.html - 33 + 36 @@ -278,7 +278,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 37 @@ -286,7 +286,7 @@ Anlageprofil apps/client/src/app/components/admin-jobs/admin-jobs.html - 49 + 52 @@ -294,7 +294,7 @@ Historische Marktdaten apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 57 @@ -302,7 +302,7 @@ Daten anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 109 + 112 @@ -310,7 +310,7 @@ Stacktrace anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 116 + 119 @@ -318,7 +318,7 @@ Job löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 119 + 122 @@ -370,7 +370,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 66 + 74 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -394,7 +394,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 73 + 81 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -574,7 +574,7 @@ Hinzufügen apps/client/src/app/components/admin-overview/admin-overview.html - 183 + 187 @@ -582,7 +582,7 @@ Verwaltung apps/client/src/app/components/admin-overview/admin-overview.html - 190 + 194 @@ -590,7 +590,7 @@ Cache leeren apps/client/src/app/components/admin-overview/admin-overview.html - 194 + 198 @@ -1034,7 +1034,7 @@ Gesamtvermögen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 179 + 190 @@ -1042,7 +1042,7 @@ Performance pro Jahr apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 190 + 201 @@ -1050,7 +1050,7 @@ Dividenden apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 206 + 217 @@ -1172,6 +1172,10 @@ This feature requires a subscription. Diese Funktion erfordert ein Abonnement. + + apps/client/src/app/components/home-summary/home-summary.component.ts + 112 + apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1180,6 +1184,10 @@ Upgrade Plan Abonnement abschliessen + + apps/client/src/app/components/home-summary/home-summary.component.ts + 114 + apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1382,7 +1390,7 @@ Lokalität apps/client/src/app/pages/account/account-page.html - 135 + 144 @@ -1390,7 +1398,7 @@ Datums- und Zahlenformat apps/client/src/app/pages/account/account-page.html - 137 + 146 @@ -1398,7 +1406,7 @@ Ansicht apps/client/src/app/pages/account/account-page.html - 160 + 172 @@ -1406,7 +1414,7 @@ Einloggen mit Fingerabdruck apps/client/src/app/pages/account/account-page.html - 181 + 196 @@ -1414,7 +1422,7 @@ Benutzer ID apps/client/src/app/pages/account/account-page.html - 208 + 223 @@ -1422,7 +1430,7 @@ Zugangsberechtigung apps/client/src/app/pages/account/account-page.html - 217 + 232 @@ -1516,6 +1524,10 @@ Platform Plattform + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 29 + apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1530,7 +1542,7 @@ Konto ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 55 + 63 @@ -1618,7 +1630,7 @@ Nach Konto apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 33 + 41 @@ -1626,7 +1638,7 @@ Nach Währung apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 66 @@ -1634,7 +1646,7 @@ Nach Asset Class apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 86 + 94 @@ -1642,7 +1654,7 @@ Nach Position apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 114 + 122 @@ -1650,7 +1662,7 @@ Nach Sektor apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 142 + 150 @@ -1658,7 +1670,7 @@ Nach Kontinent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 171 + 179 @@ -1666,7 +1678,7 @@ Nach Land apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 199 + 207 @@ -1674,7 +1686,7 @@ Regionen apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 230 + 238 apps/client/src/app/pages/public/public-page.html @@ -2038,7 +2050,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 111 + 107 apps/client/src/app/pages/public/public-page-routing.module.ts @@ -2278,7 +2290,7 @@ apps/client/src/app/pages/account/account-page.html - 116 + 119 @@ -2294,7 +2306,7 @@ Sprache apps/client/src/app/pages/account/account-page.html - 115 + 118 @@ -2418,7 +2430,7 @@ Entwickelte Länder apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 256 + 264 apps/client/src/app/pages/public/public-page.html @@ -2430,7 +2442,7 @@ Schwellenländer apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 265 + 273 apps/client/src/app/pages/public/public-page.html @@ -2442,7 +2454,7 @@ Andere Länder apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 274 + 282 apps/client/src/app/pages/public/public-page.html @@ -2610,7 +2622,7 @@ Experimentelle Funktionen apps/client/src/app/pages/account/account-page.html - 196 + 211 @@ -2626,7 +2638,7 @@ Vergleichen mit... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html - 14 + 18 @@ -2634,7 +2646,7 @@ Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 120 + 116 @@ -2642,7 +2654,23 @@ Anteil am Gesamtvermögen apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 17 + 18 + + + + Account Type + Account Type + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 25 + + + + Excluded from Analysis + Excluded from Analysis + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 176 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index bb9014825..6a6d3c95f 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -39,7 +39,7 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html - 28 + 31 apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -87,7 +87,7 @@ Operaciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 33 + 35 apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -211,7 +211,7 @@ Elimina los trabajos apps/client/src/app/components/admin-jobs/admin-jobs.html - 21 + 24 @@ -219,7 +219,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 29 + 32 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -239,7 +239,7 @@ Fuente de datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 30 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -255,7 +255,7 @@ Intentos apps/client/src/app/components/admin-jobs/admin-jobs.html - 31 + 34 @@ -263,7 +263,7 @@ Creado apps/client/src/app/components/admin-jobs/admin-jobs.html - 32 + 35 @@ -271,7 +271,7 @@ Finalizado apps/client/src/app/components/admin-jobs/admin-jobs.html - 33 + 36 @@ -279,7 +279,7 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 37 @@ -287,7 +287,7 @@ Perfil del activo apps/client/src/app/components/admin-jobs/admin-jobs.html - 49 + 52 @@ -295,7 +295,7 @@ Datos históricos del mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 57 @@ -303,7 +303,7 @@ Visualiza los datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 109 + 112 @@ -311,7 +311,7 @@ Visualiza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 116 + 119 @@ -319,7 +319,7 @@ Elimina el trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 119 + 122 @@ -371,7 +371,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 66 + 74 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -395,7 +395,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 73 + 81 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -575,7 +575,7 @@ Añadir apps/client/src/app/components/admin-overview/admin-overview.html - 183 + 187 @@ -583,7 +583,7 @@ Tareas domésticas apps/client/src/app/components/admin-overview/admin-overview.html - 190 + 194 @@ -591,7 +591,7 @@ Limpiar caché apps/client/src/app/components/admin-overview/admin-overview.html - 194 + 198 @@ -1035,7 +1035,7 @@ Patrimonio neto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 179 + 190 @@ -1043,7 +1043,7 @@ Rendimiento anualizado apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 190 + 201 @@ -1051,7 +1051,7 @@ Dividendo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 206 + 217 @@ -1173,6 +1173,10 @@ This feature requires a subscription. Esta funcionalidad requiere de suscripción. + + apps/client/src/app/components/home-summary/home-summary.component.ts + 112 + apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1181,6 +1185,10 @@ Upgrade Plan Mejorar plan + + apps/client/src/app/components/home-summary/home-summary.component.ts + 114 + apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1383,7 +1391,7 @@ Ubicación apps/client/src/app/pages/account/account-page.html - 135 + 144 @@ -1391,7 +1399,7 @@ Formato de fecha y número apps/client/src/app/pages/account/account-page.html - 137 + 146 @@ -1399,7 +1407,7 @@ Modo de visualización apps/client/src/app/pages/account/account-page.html - 160 + 172 @@ -1407,7 +1415,7 @@ Accede con huella digital apps/client/src/app/pages/account/account-page.html - 181 + 196 @@ -1415,7 +1423,7 @@ ID usuario apps/client/src/app/pages/account/account-page.html - 208 + 223 @@ -1423,7 +1431,7 @@ Acceso concedido apps/client/src/app/pages/account/account-page.html - 217 + 232 @@ -1517,6 +1525,10 @@ Platform Plataforma + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 29 + apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1531,7 +1543,7 @@ ID cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 55 + 63 @@ -1619,7 +1631,7 @@ Por cuenta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 33 + 41 @@ -1627,7 +1639,7 @@ Por divisa apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 66 @@ -1635,7 +1647,7 @@ Por tipo de activo apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 86 + 94 @@ -1643,7 +1655,7 @@ Por participación apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 114 + 122 @@ -1651,7 +1663,7 @@ Por sector apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 142 + 150 @@ -1659,7 +1671,7 @@ Por continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 171 + 179 @@ -1667,7 +1679,7 @@ Por país apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 199 + 207 @@ -1675,7 +1687,7 @@ Regiones apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 230 + 238 apps/client/src/app/pages/public/public-page.html @@ -2039,7 +2051,7 @@ Cartera apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 111 + 107 apps/client/src/app/pages/public/public-page-routing.module.ts @@ -2104,7 +2116,7 @@ I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. - Confirmo haber guardado mi Token de seguridad mostrado arriba en un lugar seguro. Si lo pierdo, no podré recuperar mi cuenta. + Confirmo haber guardado mi Token de seguridad mostrado arriba en un lugar seguro. Si lo pierdo, no podré recuperar mi cuenta. apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 31,34 @@ -2279,7 +2291,7 @@ apps/client/src/app/pages/account/account-page.html - 116 + 119 @@ -2295,7 +2307,7 @@ Idioma apps/client/src/app/pages/account/account-page.html - 115 + 118 @@ -2355,7 +2367,7 @@ Mercados desarrollados apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 256 + 264 apps/client/src/app/pages/public/public-page.html @@ -2399,7 +2411,7 @@ Otros mercados apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 274 + 282 apps/client/src/app/pages/public/public-page.html @@ -2411,7 +2423,7 @@ Mercados emergentes apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 265 + 273 apps/client/src/app/pages/public/public-page.html @@ -2611,7 +2623,7 @@ Funcionalidades experimentales apps/client/src/app/pages/account/account-page.html - 196 + 211 @@ -2619,7 +2631,7 @@ Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 120 + 116 @@ -2635,7 +2647,7 @@ Comparar con... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html - 14 + 18 @@ -2643,7 +2655,23 @@ Porcentaje del patrimonio neto apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 17 + 18 + + + + Account Type + Account Type + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 25 + + + + Excluded from Analysis + Excluded from Analysis + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 176 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 1e31425cc..dac25da73 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -39,7 +39,7 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html - 28 + 31 apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -76,7 +76,7 @@ Do you really want to revoke this granted access? - Vuoi davvero revocare l'accesso concesso? + Vuoi davvero revocare l'accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts 49 @@ -87,7 +87,7 @@ Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 33 + 35 apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -211,7 +211,7 @@ Elimina i lavori apps/client/src/app/components/admin-jobs/admin-jobs.html - 21 + 24 @@ -219,7 +219,7 @@ Simbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 29 + 32 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -239,7 +239,7 @@ Sorgente dei dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 30 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -255,7 +255,7 @@ Tentativi apps/client/src/app/components/admin-jobs/admin-jobs.html - 31 + 34 @@ -263,7 +263,7 @@ Creato apps/client/src/app/components/admin-jobs/admin-jobs.html - 32 + 35 @@ -271,7 +271,7 @@ Finito apps/client/src/app/components/admin-jobs/admin-jobs.html - 33 + 36 @@ -279,7 +279,7 @@ Stato apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 37 @@ -287,7 +287,7 @@ Profilo degli asset apps/client/src/app/components/admin-jobs/admin-jobs.html - 49 + 52 @@ -295,7 +295,7 @@ Dati storici del mercato apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 57 @@ -303,7 +303,7 @@ Visualizza i dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 109 + 112 @@ -311,7 +311,7 @@ Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 116 + 119 @@ -319,7 +319,7 @@ Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 119 + 122 @@ -371,7 +371,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 66 + 74 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -395,7 +395,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 73 + 81 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -575,7 +575,7 @@ Aggiungi apps/client/src/app/components/admin-overview/admin-overview.html - 183 + 187 @@ -583,7 +583,7 @@ Bilancio domestico apps/client/src/app/components/admin-overview/admin-overview.html - 190 + 194 @@ -591,7 +591,7 @@ Svuota la cache apps/client/src/app/components/admin-overview/admin-overview.html - 194 + 198 @@ -640,7 +640,7 @@ Current Market Mood - Stato d'animo attuale del mercato + Stato d'animo attuale del mercato apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html 12 @@ -1024,7 +1024,7 @@ Buying Power - Potere d'acquisto + Potere d'acquisto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 165 @@ -1035,7 +1035,7 @@ Patrimonio netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 179 + 190 @@ -1043,7 +1043,7 @@ Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 190 + 201 @@ -1051,12 +1051,12 @@ Dividendo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 206 + 217 Please enter the amount of your emergency fund: - Inserisci l'importo del tuo fondo di emergenza: + Inserisci l'importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 52 @@ -1096,7 +1096,7 @@ Report Data Glitch - Segnala un'anomalia dei dati + Segnala un'anomalia dei dati apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 249 @@ -1173,6 +1173,10 @@ This feature requires a subscription. Questa funzione richiede un abbonamento. + + apps/client/src/app/components/home-summary/home-summary.component.ts + 112 + apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1181,6 +1185,10 @@ Upgrade Plan Piano di aggiornamento + + apps/client/src/app/components/home-summary/home-summary.component.ts + 114 + apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1236,7 +1244,7 @@ License - Licenza d'uso + Licenza d'uso apps/client/src/app/pages/about/changelog/changelog-page.html 15 @@ -1383,7 +1391,7 @@ Locale apps/client/src/app/pages/account/account-page.html - 135 + 144 @@ -1391,7 +1399,7 @@ Formato data e numero apps/client/src/app/pages/account/account-page.html - 137 + 146 @@ -1399,7 +1407,7 @@ Modalità di visualizzazione apps/client/src/app/pages/account/account-page.html - 160 + 172 @@ -1407,7 +1415,7 @@ Accesso con impronta digitale apps/client/src/app/pages/account/account-page.html - 181 + 196 @@ -1415,7 +1423,7 @@ ID utente apps/client/src/app/pages/account/account-page.html - 208 + 223 @@ -1423,12 +1431,12 @@ Accesso concesso apps/client/src/app/pages/account/account-page.html - 217 + 232 Grant access - Concedi l'accesso + Concedi l'accesso apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1517,6 +1525,10 @@ Platform Piattaforma + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 29 + apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1531,7 +1543,7 @@ ID account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 55 + 63 @@ -1552,7 +1564,7 @@ As you are already logged in, you cannot access the demo account. - Poiché hai già effettuato l’accesso, non puoi accedere all'account demo. + Poiché hai già effettuato l’accesso, non puoi accedere all'account demo. apps/client/src/app/pages/demo/demo-page.component.ts 31 @@ -1619,7 +1631,7 @@ Per account apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 33 + 41 @@ -1627,7 +1639,7 @@ Per valuta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 66 @@ -1635,7 +1647,7 @@ Per asset class apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 86 + 94 @@ -1643,7 +1655,7 @@ Per partecipazione apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 114 + 122 @@ -1651,7 +1663,7 @@ Per settore apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 142 + 150 @@ -1659,7 +1671,7 @@ Per continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 171 + 179 @@ -1667,7 +1679,7 @@ Per paese apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 199 + 207 @@ -1675,7 +1687,7 @@ Regioni apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 230 + 238 apps/client/src/app/pages/public/public-page.html @@ -1852,7 +1864,7 @@ Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. - Ghostfolio X-ray utilizza l'analisi statica per identificare potenziali problemi e rischi nel tuo portafoglio. + Ghostfolio X-ray utilizza l'analisi statica per identificare potenziali problemi e rischi nel tuo portafoglio. apps/client/src/app/pages/portfolio/portfolio-page.html 100,103 @@ -1884,7 +1896,7 @@ Update activity - Aggiorna l'attività + Aggiorna l'attività apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 7,8 @@ -1892,7 +1904,7 @@ Add activity - Aggiungi un'attività + Aggiungi un'attività apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html 8,11 @@ -2020,7 +2032,7 @@ Import has been completed - L'importazione è stata completata + L'importazione è stata completata apps/client/src/app/pages/portfolio/transactions/transactions-page.component.ts 337 @@ -2039,7 +2051,7 @@ Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 111 + 107 apps/client/src/app/pages/public/public-page-routing.module.ts @@ -2104,7 +2116,7 @@ I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. - Accetto di aver memorizzato il mio Token di sicurezza sopra citato in un luogo sicuro. Se lo perdo, non posso recuperare il mio account. + Accetto di aver memorizzato il mio Token di sicurezza sopra citato in un luogo sicuro. Se lo perdo, non posso recuperare il mio account. apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 31,34 @@ -2128,7 +2140,7 @@ Oops, authentication has failed. - Ops, l'autenticazione non è riuscita. + Ops, l'autenticazione non è riuscita. apps/client/src/app/pages/webauthn/webauthn-page.html 18 @@ -2279,7 +2291,7 @@ apps/client/src/app/pages/account/account-page.html - 116 + 119 @@ -2295,7 +2307,7 @@ Lingua apps/client/src/app/pages/account/account-page.html - 115 + 118 @@ -2355,7 +2367,7 @@ Mercati sviluppati apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 256 + 264 apps/client/src/app/pages/public/public-page.html @@ -2399,7 +2411,7 @@ Altri mercati apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 274 + 282 apps/client/src/app/pages/public/public-page.html @@ -2411,7 +2423,7 @@ Mercati emergenti apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 265 + 273 apps/client/src/app/pages/public/public-page.html @@ -2611,7 +2623,7 @@ Funzionalità sperimentali apps/client/src/app/pages/account/account-page.html - 196 + 211 @@ -2619,7 +2631,7 @@ Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 120 + 116 @@ -2635,7 +2647,7 @@ Confronta con... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html - 14 + 18 @@ -2643,7 +2655,23 @@ Percentuale del patrimonio netto apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 17 + 18 + + + + Account Type + Account Type + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 25 + + + + Excluded from Analysis + Excluded from Analysis + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 176 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 597b886c0..9a26ef226 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -38,7 +38,7 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html - 28 + 31 apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -86,7 +86,7 @@ Activiteiten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 33 + 35 apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -210,7 +210,7 @@ Taken verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 21 + 24 @@ -218,7 +218,7 @@ Symbool apps/client/src/app/components/admin-jobs/admin-jobs.html - 29 + 32 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -238,7 +238,7 @@ Gegevensbron apps/client/src/app/components/admin-jobs/admin-jobs.html - 30 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -254,7 +254,7 @@ Pogingen apps/client/src/app/components/admin-jobs/admin-jobs.html - 31 + 34 @@ -262,7 +262,7 @@ Gemaakt apps/client/src/app/components/admin-jobs/admin-jobs.html - 32 + 35 @@ -270,7 +270,7 @@ Voltooid apps/client/src/app/components/admin-jobs/admin-jobs.html - 33 + 36 @@ -278,7 +278,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 37 @@ -286,7 +286,7 @@ Activa Profiel apps/client/src/app/components/admin-jobs/admin-jobs.html - 49 + 52 @@ -294,7 +294,7 @@ Historische marktgegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 57 @@ -302,7 +302,7 @@ Bekijk gegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 109 + 112 @@ -310,7 +310,7 @@ Bekijk Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 116 + 119 @@ -318,7 +318,7 @@ Taak verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 119 + 122 @@ -370,7 +370,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 66 + 74 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -394,7 +394,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 73 + 81 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -574,7 +574,7 @@ Toevoegen apps/client/src/app/components/admin-overview/admin-overview.html - 183 + 187 @@ -582,7 +582,7 @@ Huishouding apps/client/src/app/components/admin-overview/admin-overview.html - 190 + 194 @@ -590,7 +590,7 @@ Cache legen apps/client/src/app/components/admin-overview/admin-overview.html - 194 + 198 @@ -1034,7 +1034,7 @@ Netto Waarde apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 179 + 190 @@ -1042,7 +1042,7 @@ Jaarlijks rendement apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 190 + 201 @@ -1050,7 +1050,7 @@ Dividend apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 206 + 217 @@ -1172,6 +1172,10 @@ This feature requires a subscription. Voor deze functie is een abonnement vereist. + + apps/client/src/app/components/home-summary/home-summary.component.ts + 112 + apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1180,6 +1184,10 @@ Upgrade Plan Upgrade plan + + apps/client/src/app/components/home-summary/home-summary.component.ts + 114 + apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1219,7 +1227,7 @@ Changelog & License - Changelog & licentie + Changelog & licentie apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts 12 @@ -1382,7 +1390,7 @@ Locale apps/client/src/app/pages/account/account-page.html - 135 + 144 @@ -1390,7 +1398,7 @@ Formaat datum en getal apps/client/src/app/pages/account/account-page.html - 137 + 146 @@ -1398,7 +1406,7 @@ Weergavemodus apps/client/src/app/pages/account/account-page.html - 160 + 172 @@ -1406,7 +1414,7 @@ Aanmelden met vingerafdruk apps/client/src/app/pages/account/account-page.html - 181 + 196 @@ -1414,7 +1422,7 @@ Gebruikers-ID apps/client/src/app/pages/account/account-page.html - 208 + 223 @@ -1422,7 +1430,7 @@ Verleende toegang apps/client/src/app/pages/account/account-page.html - 217 + 232 @@ -1516,6 +1524,10 @@ Platform Platform + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 29 + apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1530,7 +1542,7 @@ Rekening-ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 55 + 63 @@ -1618,7 +1630,7 @@ Per rekening apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 33 + 41 @@ -1626,7 +1638,7 @@ Per valuta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 66 @@ -1634,7 +1646,7 @@ Per activaklasse apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 86 + 94 @@ -1642,7 +1654,7 @@ Per participatie apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 114 + 122 @@ -1650,7 +1662,7 @@ Per Sector apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 142 + 150 @@ -1658,7 +1670,7 @@ Per continent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 171 + 179 @@ -1666,15 +1678,15 @@ Per land apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 199 + 207 Regions - Regio's + Regio's apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 230 + 238 apps/client/src/app/pages/public/public-page.html @@ -1803,7 +1815,7 @@ Manage your activities: stocks, ETFs, cryptocurrencies, dividend, and valuables. - Beheer uw activiteiten: aandelen, ETF's, cryptocurrencies, dividend en kostbaarheden. + Beheer uw activiteiten: aandelen, ETF's, cryptocurrencies, dividend en kostbaarheden. apps/client/src/app/pages/portfolio/portfolio-page.html 25,28 @@ -1851,7 +1863,7 @@ Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. - Ghostfolio X-ray gebruikt statische analyse om potentiële problemen en risico's in uw portefeuille te identificeren. + Ghostfolio X-ray gebruikt statische analyse om potentiële problemen en risico's in uw portefeuille te identificeren. apps/client/src/app/pages/portfolio/portfolio-page.html 100,103 @@ -2038,7 +2050,7 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 111 + 107 apps/client/src/app/pages/public/public-page-routing.module.ts @@ -2047,7 +2059,7 @@ Currencies - Valuta's + Valuta's apps/client/src/app/pages/public/public-page.html 30 @@ -2278,7 +2290,7 @@ apps/client/src/app/pages/account/account-page.html - 116 + 119 @@ -2294,7 +2306,7 @@ Taal apps/client/src/app/pages/account/account-page.html - 115 + 118 @@ -2354,7 +2366,7 @@ Ontwikkelde markten apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 256 + 264 apps/client/src/app/pages/public/public-page.html @@ -2398,7 +2410,7 @@ Andere markten apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 274 + 282 apps/client/src/app/pages/public/public-page.html @@ -2410,7 +2422,7 @@ Opkomende markten apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 265 + 273 apps/client/src/app/pages/public/public-page.html @@ -2610,7 +2622,7 @@ Experimentele functies apps/client/src/app/pages/account/account-page.html - 196 + 211 @@ -2618,7 +2630,7 @@ Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 120 + 116 @@ -2634,7 +2646,7 @@ Vergelijk met... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html - 14 + 18 @@ -2642,7 +2654,23 @@ Verhouding van nettowaarde apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 17 + 18 + + + + Account Type + Account Type + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 25 + + + + Excluded from Analysis + Excluded from Analysis + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 176 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 670583b59..b5469d90a 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -35,7 +35,7 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html - 28 + 31 apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -79,7 +79,7 @@ Activities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 33 + 35 apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -196,14 +196,14 @@ Delete Jobs apps/client/src/app/components/admin-jobs/admin-jobs.html - 21 + 24 Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 29 + 32 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -222,7 +222,7 @@ Data Source apps/client/src/app/components/admin-jobs/admin-jobs.html - 30 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -237,63 +237,63 @@ Attempts apps/client/src/app/components/admin-jobs/admin-jobs.html - 31 + 34 Created apps/client/src/app/components/admin-jobs/admin-jobs.html - 32 + 35 Finished apps/client/src/app/components/admin-jobs/admin-jobs.html - 33 + 36 Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 37 Asset Profile apps/client/src/app/components/admin-jobs/admin-jobs.html - 49 + 52 Historical Market Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 57 View Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 109 + 112 View Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 116 + 119 Delete Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 119 + 122 @@ -341,7 +341,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 66 + 74 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -364,7 +364,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 73 + 81 apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html @@ -523,21 +523,21 @@ Add apps/client/src/app/components/admin-overview/admin-overview.html - 183 + 187 Housekeeping apps/client/src/app/components/admin-overview/admin-overview.html - 190 + 194 Flush Cache apps/client/src/app/components/admin-overview/admin-overview.html - 194 + 198 @@ -936,21 +936,21 @@ Net Worth apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 179 + 190 Annualized Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 190 + 201 Dividend apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 206 + 217 @@ -1058,6 +1058,10 @@ This feature requires a subscription. + + apps/client/src/app/components/home-summary/home-summary.component.ts + 112 + apps/client/src/app/core/http-response.interceptor.ts 67 @@ -1065,6 +1069,10 @@ Upgrade Plan + + apps/client/src/app/components/home-summary/home-summary.component.ts + 114 + apps/client/src/app/core/http-response.interceptor.ts 69 @@ -1243,42 +1251,42 @@ Locale apps/client/src/app/pages/account/account-page.html - 135 + 144 Date and number format apps/client/src/app/pages/account/account-page.html - 137 + 146 View Mode apps/client/src/app/pages/account/account-page.html - 160 + 172 Sign in with fingerprint apps/client/src/app/pages/account/account-page.html - 181 + 196 User ID apps/client/src/app/pages/account/account-page.html - 208 + 223 Granted Access apps/client/src/app/pages/account/account-page.html - 217 + 232 @@ -1362,6 +1370,10 @@ Platform + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 29 + apps/client/src/app/components/accounts-table/accounts-table.component.html 35 @@ -1375,7 +1387,7 @@ Account ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 55 + 63 @@ -1453,56 +1465,56 @@ By Account apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 33 + 41 By Currency apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 66 By Asset Class apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 86 + 94 By Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 114 + 122 By Sector apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 142 + 150 By Continent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 171 + 179 By Country apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 199 + 207 Regions apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 230 + 238 apps/client/src/app/pages/public/public-page.html @@ -1826,7 +1838,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 111 + 107 apps/client/src/app/pages/public/public-page-routing.module.ts @@ -2037,7 +2049,7 @@ apps/client/src/app/pages/account/account-page.html - 116 + 119 @@ -2051,7 +2063,7 @@ Language apps/client/src/app/pages/account/account-page.html - 115 + 118 @@ -2104,7 +2116,7 @@ Developed Markets apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 256 + 264 apps/client/src/app/pages/public/public-page.html @@ -2144,7 +2156,7 @@ Other Markets apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 274 + 282 apps/client/src/app/pages/public/public-page.html @@ -2155,7 +2167,7 @@ Emerging Markets apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 265 + 273 apps/client/src/app/pages/public/public-page.html @@ -2332,14 +2344,14 @@ Experimental Features apps/client/src/app/pages/account/account-page.html - 196 + 211 Benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 120 + 116 @@ -2353,16 +2365,30 @@ Compare with... apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html - 14 + 18 Proportion of Net Worth apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 17 + 18 + + + + Excluded from Analysis + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 176 + + + + Account Type + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 25 - \ No newline at end of file + From 93a1fae51c7aad38da8261831218bf0bb7b11eb1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:38:53 +0200 Subject: [PATCH 17/29] Feature/support sectors of mutual funds (#1298) * Support sectors * Update changelog Co-authored-by: Mitchell <5503199+m11tch@users.noreply.github.com> --- CHANGELOG.md | 1 + .../yahoo-finance/yahoo-finance.service.ts | 56 ++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f89a0d83..998990288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Set up the language localization for Español (`es`) +- Added support for sectors in mutual funds ## 1.198.0 - 25.09.2022 diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index 2a7e93ed6..bc408ca4d 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -6,6 +6,7 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { DATE_FORMAT, isCurrency } from '@ghostfolio/common/helper'; import { Granularity } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; @@ -90,7 +91,7 @@ export class YahooFinanceService implements DataProviderInterface { try { const symbol = this.convertToYahooFinanceSymbol(aSymbol); const assetProfile = await yahooFinance.quoteSummary(symbol, { - modules: ['price', 'summaryProfile'] + modules: ['price', 'summaryProfile', 'topHoldings'] }); const { assetClass, assetSubClass } = this.parseAssetClass( @@ -109,7 +110,16 @@ export class YahooFinanceService implements DataProviderInterface { }); response.symbol = aSymbol; - if ( + if (assetSubClass === AssetSubClass.MUTUALFUND) { + response.sectors = []; + + for (const sectorWeighting of assetProfile.topHoldings + ?.sectorWeightings ?? []) { + for (const [sector, weight] of Object.entries(sectorWeighting)) { + response.sectors.push({ weight, name: this.parseSector(sector) }); + } + } + } else if ( assetSubClass === AssetSubClass.STOCK && assetProfile.summaryProfile?.country ) { @@ -437,4 +447,46 @@ export class YahooFinanceService implements DataProviderInterface { return { assetClass, assetSubClass }; } + + private parseSector(aString: string): string { + let sector = UNKNOWN_KEY; + + switch (aString) { + case 'basic_materials': + sector = 'Basic Materials'; + break; + case 'communication_services': + sector = 'Communication Services'; + break; + case 'consumer_cyclical': + sector = 'Consumer Cyclical'; + break; + case 'consumer_defensive': + sector = 'Consumer Staples'; + break; + case 'energy': + sector = 'Energy'; + break; + case 'financial_services': + sector = 'Financial Services'; + break; + case 'healthcare': + sector = 'Healthcare'; + break; + case 'industrials': + sector = 'Industrials'; + break; + case 'realestate': + sector = 'Real Estate'; + break; + case 'technology': + sector = 'Technology'; + break; + case 'utilities': + sector = 'Utilities'; + break; + } + + return sector; + } } From fefbfa31d10c6fa2b98333314daa0745ed0a4b63 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 27 Sep 2022 20:28:46 +0200 Subject: [PATCH 18/29] Release 1.199.0 (#1300) --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 998990288..4e56a4c53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.199.0 - 27.09.2022 ### Added diff --git a/package.json b/package.json index 88bf4b784..d8cbe5e6e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.198.0", + "version": "1.199.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From 5c9fa71d951e11f32eaefd0681084bf9b5a930d8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 27 Sep 2022 20:44:32 +0200 Subject: [PATCH 19/29] Release 1.199.1 (#1301) --- CHANGELOG.md | 2 +- apps/api/src/app/frontend.middleware.ts | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e56a4c53..1a123e4bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 1.199.0 - 27.09.2022 +## 1.199.1 - 27.09.2022 ### Added diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts index c49560c3a..ccf6ca05c 100644 --- a/apps/api/src/app/frontend.middleware.ts +++ b/apps/api/src/app/frontend.middleware.ts @@ -78,7 +78,7 @@ export class FrontendMiddleware implements NestMiddleware { ); } else if (req.path === '/es' || req.path.startsWith('/es/')) { res.send( - this.interpolate(this.indexHtmlIt, { + this.interpolate(this.indexHtmlEs, { featureGraphicPath, languageCode: 'es', path: req.path, diff --git a/package.json b/package.json index d8cbe5e6e..8b37a47e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.199.0", + "version": "1.199.1", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From c857ea9a8fbf26911c9d8976034045e7189d6d5f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 29 Sep 2022 21:59:51 +0200 Subject: [PATCH 20/29] Feature/add as seen in section on landing page (#1302) * Add as seen in section * Update changelog --- CHANGELOG.md | 6 ++ .../src/app/pages/landing/landing-page.html | 56 ++++++++++++- .../src/app/pages/landing/landing-page.scss | 75 ++++++++++++++---- .../{AGPLv3-logo.svg => logo-AGPLv3.svg} | 0 .../src/assets/images/logo-alternative-to.svg | 1 + .../client/src/assets/images/logo-awesome.png | Bin 0 -> 17377 bytes .../src/assets/images/logo-openstartup.png | Bin 0 -> 57189 bytes .../src/assets/images/logo-privacy-tools.svg | 35 ++++++++ .../src/assets/images/logo-product-hunt.png | Bin 0 -> 21327 bytes apps/client/src/assets/images/logo-unraid.svg | 9 +++ 10 files changed, 166 insertions(+), 16 deletions(-) rename apps/client/src/assets/images/{AGPLv3-logo.svg => logo-AGPLv3.svg} (100%) create mode 100644 apps/client/src/assets/images/logo-alternative-to.svg create mode 100644 apps/client/src/assets/images/logo-awesome.png create mode 100644 apps/client/src/assets/images/logo-openstartup.png create mode 100644 apps/client/src/assets/images/logo-privacy-tools.svg create mode 100644 apps/client/src/assets/images/logo-product-hunt.png create mode 100644 apps/client/src/assets/images/logo-unraid.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a123e4bf..b84ad5cce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added an _As seen in_ section to the landing page + ## 1.199.1 - 27.09.2022 ### Added diff --git a/apps/client/src/app/pages/landing/landing-page.html b/apps/client/src/app/pages/landing/landing-page.html index f2f287940..a10e64671 100644 --- a/apps/client/src/app/pages/landing/landing-page.html +++ b/apps/client/src/app/pages/landing/landing-page.html @@ -42,6 +42,58 @@
+
+
As seen in
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

@@ -196,7 +248,7 @@

-
+

Are you ready?

Join now or check out the example account @@ -240,7 +292,7 @@

+ +
As seen in
- 360° View + 360° View Get the full picture of your personal finances across multiple platforms.
- Web3 Ready + Web3 Ready Use Ghostfolio anonymously and own your financial data.
- Open Source + Open Source Benefit from continuous improvements through a strong community.
diff --git a/apps/client/src/app/pages/landing/landing-page.module.ts b/apps/client/src/app/pages/landing/landing-page.module.ts index 2116d972d..37c67f270 100644 --- a/apps/client/src/app/pages/landing/landing-page.module.ts +++ b/apps/client/src/app/pages/landing/landing-page.module.ts @@ -4,6 +4,7 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { RouterModule } from '@angular/router'; import { GfLogoModule } from '@ghostfolio/ui/logo'; +import { GfValueModule } from '@ghostfolio/ui/value'; import { LandingPageRoutingModule } from './landing-page-routing.module'; import { LandingPageComponent } from './landing-page.component'; @@ -13,6 +14,7 @@ import { LandingPageComponent } from './landing-page.component'; imports: [ CommonModule, GfLogoModule, + GfValueModule, LandingPageRoutingModule, MatButtonModule, MatCardModule, diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 932c548f5..ae0ef8c40 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -18,6 +18,7 @@ $mat-css-light-theme-selector: '.is-light-theme'; :root { --dark-background: rgb(39, 39, 39); + --font-family-sans-serif: Roboto, 'Helvetica Neue', sans-serif; --light-background: rgb(255, 255, 255); } @@ -146,6 +147,10 @@ ngx-skeleton-loader { @include gf-table; } +.lead { + font-weight: unset; +} + .mat-card { &:not([class*='mat-elevation-z']) { border: 1px solid rgba(var(--dark-dividers)); diff --git a/libs/common/src/lib/interfaces/statistics.interface.ts b/libs/common/src/lib/interfaces/statistics.interface.ts index ba3f0a1d9..f39529426 100644 --- a/libs/common/src/lib/interfaces/statistics.interface.ts +++ b/libs/common/src/lib/interfaces/statistics.interface.ts @@ -1,6 +1,7 @@ export interface Statistics { activeUsers1d: number; activeUsers30d: number; + dockerHubPulls: number; gitHubContributors: number; gitHubStargazers: number; newUsers30d: number; diff --git a/libs/ui/src/lib/value/value.component.html b/libs/ui/src/lib/value/value.component.html index 9a08ad813..80b6a09fa 100644 --- a/libs/ui/src/lib/value/value.component.html +++ b/libs/ui/src/lib/value/value.component.html @@ -1,67 +1,73 @@ - - -
- - -
+
-
-
-
-
- {{ formattedValue }}% -
-
- - *** - - - {{ formattedValue }} +
+ +
+
+ + +
+ + +
+
+
-
+
+ {{ formattedValue }}% +
+
+ + *** + + + {{ formattedValue }} + +
+ + {{ currency }} + +
+ {{ currency }} +
+
+ +
+ {{ formattedValue | titlecase }} +
+
+
+ +
+ + {{ subLabel }}
- - {{ currency }} + + -
- {{ currency }} -
- -
- {{ formattedValue | titlecase }} -
-
-
- -
- - {{ subLabel }} -
- - -
-
- + +
diff --git a/libs/ui/src/lib/value/value.component.scss b/libs/ui/src/lib/value/value.component.scss index 04c8fe3ff..f690dc46c 100644 --- a/libs/ui/src/lib/value/value.component.scss +++ b/libs/ui/src/lib/value/value.component.scss @@ -1,6 +1,6 @@ :host { display: flex; - flex-direction: column; + flex-direction: row; font-variant-numeric: tabular-nums; .h2 { diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts index f05e53551..d92d87cb1 100644 --- a/libs/ui/src/lib/value/value.component.ts +++ b/libs/ui/src/lib/value/value.component.ts @@ -16,6 +16,7 @@ import { isNumber } from 'lodash'; export class ValueComponent implements OnChanges { @Input() colorizeSign = false; @Input() currency = ''; + @Input() icon = ''; @Input() isAbsolute = false; @Input() isCurrency = false; @Input() isDate = false; diff --git a/libs/ui/src/lib/value/value.module.ts b/libs/ui/src/lib/value/value.module.ts index 9d3c9aedb..1cb91050e 100644 --- a/libs/ui/src/lib/value/value.module.ts +++ b/libs/ui/src/lib/value/value.module.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { ValueComponent } from './value.component'; @@ -8,6 +8,6 @@ import { ValueComponent } from './value.component'; declarations: [ValueComponent], exports: [ValueComponent], imports: [CommonModule, NgxSkeletonLoaderModule], - providers: [] + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) export class GfValueModule {} From cf234003ec1753d4a6d1c7e0ec164b8d0c550240 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Oct 2022 11:18:15 +0200 Subject: [PATCH 23/29] Release 1.200.0 (#1307) --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d08790e8..716692095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.200.0 - 01.10.2022 ### Added diff --git a/package.json b/package.json index a4a6d697b..cac3f8828 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.199.1", + "version": "1.200.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From a6186c23e268666c0ee6189ae0f07633cd25ec42 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Oct 2022 13:53:43 +0200 Subject: [PATCH 24/29] Feature/improve usage of value component (#1308) * Improve usage of value component * Update changelog --- CHANGELOG.md | 10 +++++++++ .../admin-overview/admin-overview.html | 21 ++++++++++++++----- .../allocations/allocations-page.html | 6 +++--- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 716692095..df7830ce7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the usage of the value component in the admin control panel + +### Fixed + +- Fixed the usage of the value component on the allocations page + ## 1.200.0 - 01.10.2022 ### Added diff --git a/apps/client/src/app/components/admin-overview/admin-overview.html b/apps/client/src/app/components/admin-overview/admin-overview.html index 768a14937..97be48141 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.html +++ b/apps/client/src/app/components/admin-overview/admin-overview.html @@ -5,15 +5,26 @@
User Count
-
{{ userCount }}
+
+ +
Activity Count
- - {{ transactionCount }} ({{ transactionCount / userCount | number - : '1.2-2' }} per User) - + +
+ {{ transactionCount / userCount | number : '1.2-2' }} + per User +
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html index 36e98011c..0265d4d71 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html @@ -13,12 +13,12 @@
- - + Proportion of Net Worth Date: Sat, 1 Oct 2022 16:45:44 +0200 Subject: [PATCH 25/29] Update messages.es.xlf (#1305) * Update messages.es.xlf Co-authored-by: fdp10381 <63880387+fdp10381@users.noreply.github.com> --- apps/client/src/locales/messages.es.xlf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 6a6d3c95f..3bf01e99a 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -2660,7 +2660,7 @@ Account Type - Account Type + Tipo de cuenta apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 25 @@ -2668,7 +2668,7 @@ Excluded from Analysis - Excluded from Analysis + Excluido del análisis apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 176 From 859b24aa5b0500a2ab5b728b23241acf3d5910aa Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Oct 2022 18:35:27 +0200 Subject: [PATCH 26/29] Fix alignment (#1311) --- apps/client/src/app/components/admin-users/admin-users.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html index c047d8897..a40fcc7e5 100644 --- a/apps/client/src/app/components/admin-users/admin-users.html +++ b/apps/client/src/app/components/admin-users/admin-users.html @@ -45,21 +45,21 @@ Date: Sat, 1 Oct 2022 18:35:55 +0200 Subject: [PATCH 27/29] Feature/add blog post hacktoberfest 2022 (#1310) * Add blog post: Hacktoberfest 2022 * Update changelog --- CHANGELOG.md | 4 + apps/api/src/app/frontend.middleware.ts | 5 + apps/client/src/app/app-routing.module.ts | 7 + .../hacktoberfest-2022-page-routing.module.ts | 20 ++ .../hacktoberfest-2022-page.component.ts | 9 + .../hacktoberfest-2022-page.html | 178 ++++++++++++++++++ .../hacktoberfest-2022-page.module.ts | 13 ++ .../hacktoberfest-2022-page.scss | 3 + apps/client/src/app/pages/blog/blog-page.html | 24 +++ .../assets/images/blog/hacktoberfest-2022.png | Bin 0 -> 43116 bytes apps/client/src/assets/sitemap.xml | 38 ++-- 11 files changed, 284 insertions(+), 17 deletions(-) create mode 100644 apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page-routing.module.ts create mode 100644 apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts create mode 100644 apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.html create mode 100644 apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.module.ts create mode 100644 apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.scss create mode 100644 apps/client/src/assets/images/blog/hacktoberfest-2022.png diff --git a/CHANGELOG.md b/CHANGELOG.md index df7830ce7..73aae3b1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added a blog post: _Hacktoberfest 2022_ + ### Changed - Improved the usage of the value component in the admin control panel diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts index ccf6ca05c..a1ab6452c 100644 --- a/apps/api/src/app/frontend.middleware.ts +++ b/apps/api/src/app/frontend.middleware.ts @@ -58,6 +58,11 @@ export class FrontendMiddleware implements NestMiddleware { req.path === '/en/blog/2022/08/500-stars-on-github/' ) { featureGraphicPath = 'assets/images/blog/500-stars-on-github.jpg'; + } else if ( + req.path === '/en/blog/2022/10/hacktoberfest-2022' || + req.path === '/en/blog/2022/10/hacktoberfest-2022/' + ) { + featureGraphicPath = 'assets/images/blog/hacktoberfest-2022.png'; } if ( diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index da506e673..856230eb6 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -95,6 +95,13 @@ const routes: Routes = [ './pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.module' ).then((m) => m.FiveHundredStarsOnGitHubPageModule) }, + { + path: 'blog/2022/10/hacktoberfest-2022', + loadChildren: () => + import( + './pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.module' + ).then((m) => m.Hacktoberfest2022PageModule) + }, { path: 'demo', loadChildren: () => diff --git a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page-routing.module.ts b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page-routing.module.ts new file mode 100644 index 000000000..7ee6a0cff --- /dev/null +++ b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { Hacktoberfest2022PageComponent } from './hacktoberfest-2022-page.component'; + +const routes: Routes = [ + { + canActivate: [AuthGuard], + component: Hacktoberfest2022PageComponent, + path: '', + title: 'Hacktoberfest 2022' + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class Hacktoberfest2022RoutingModule {} diff --git a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts new file mode 100644 index 000000000..7417a09bf --- /dev/null +++ b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + host: { class: 'page' }, + selector: 'gf-hacktoberfest-2022-page', + styleUrls: ['./hacktoberfest-2022-page.scss'], + templateUrl: './hacktoberfest-2022-page.html' +}) +export class Hacktoberfest2022PageComponent {} diff --git a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.html b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.html new file mode 100644 index 000000000..f2d9e90b4 --- /dev/null +++ b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.html @@ -0,0 +1,178 @@ +
+
+
+
+
+

Hacktoberfest 2022

+
2022-10-01
+ Hacktoberfest 2022 with Ghostfolio Teaser +
+
+

+ We are very excited to join + Hacktoberfest for the first + time with Ghostfolio and meet new + and ambitious open-source contributors. Hacktoberfest is a + month-long celebration of open-source projects, their maintainers, + and the entire community of contributors. Each October, open source + maintainers from all over the world give extra attention to new + contributors while guiding them through their first pull requests on + GitHub. +

+
+
+

About Ghostfolio

+

+ Ghostfolio is a modern web application to manage your personal + finance. The software presents the current assets in real time and + supports the decision making of future investments. Whether + rebalancing the asset classes (stocks, ETFs, cryptocurrencies, etc.) + of your portfolio or financing an apartment, Ghostfolio offers + solid, data-driven decision support. +

+

+ Ghostfolio is written in + TypeScript and + organized as an Nx workspace. The + backend is based on NestJS using + PostgreSQL as a database + together with Prisma and + Redis for caching. The frontend is + built with Angular. +

+
+
+

How to contribute?

+

+ Every contribution matters. This can be implementing new features, + fixing bugs, refactoring the code, improving the documentation, + adding more unit tests, or translating into another language. +

+

+ Are you not yet familiar with our code base? That is not a problem. + We have applied the label hacktoberfest to a few + issues + and + ideas + that are well suited for newcomers. +

+

+ The official Hacktoberfest website provides some valuable + resources for beginners + to start contributing in open source. +

+
+
+

Get support

+

+ If you have further questions or ideas, please join our growing + Slack community or get in + touch on Twitter + @ghostfolio_ or by + email via hi@ghostfol.io. +

+

+ We look forward to hearing from you.
+ Thomas from Ghostfolio +

+
+
+
    +
  • + Angular +
  • +
  • + Community +
  • +
  • + Cryptocurrency +
  • +
  • + ETF +
  • +
  • + Finance +
  • +
  • + Fintech +
  • +
  • + Ghostfolio +
  • +
  • + GitHub +
  • +
  • + Hacktoberfest +
  • +
  • + Investment +
  • +
  • + NestJS +
  • +
  • + Nx +
  • +
  • + October +
  • +
  • + Open Source +
  • +
  • + OSS +
  • +
  • + Personal Finance +
  • +
  • + Portfolio +
  • +
  • + Portfolio Tracker +
  • +
  • + Prisma +
  • +
  • + Software +
  • +
  • + Stock +
  • +
  • + TypeScript +
  • +
  • + Wealth +
  • +
  • + Wealth Management +
  • +
  • + Web3 +
  • +
  • + Web 3.0 +
  • +
+
+
+
+
+
diff --git a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.module.ts b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.module.ts new file mode 100644 index 000000000..fba8a359d --- /dev/null +++ b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { Hacktoberfest2022RoutingModule } from './hacktoberfest-2022-page-routing.module'; +import { Hacktoberfest2022PageComponent } from './hacktoberfest-2022-page.component'; + +@NgModule({ + declarations: [Hacktoberfest2022PageComponent], + imports: [CommonModule, Hacktoberfest2022RoutingModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class Hacktoberfest2022PageModule {} diff --git a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.scss b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html index 2cdd2a604..f2d1de322 100644 --- a/apps/client/src/app/pages/blog/blog-page.html +++ b/apps/client/src/app/pages/blog/blog-page.html @@ -2,6 +2,30 @@

Blog

+ + + + +
diff --git a/apps/client/src/assets/images/blog/hacktoberfest-2022.png b/apps/client/src/assets/images/blog/hacktoberfest-2022.png new file mode 100644 index 0000000000000000000000000000000000000000..0f20e0406b219459309befd3e0ae9549c1ca7838 GIT binary patch literal 43116 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 literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/sitemap.xml b/apps/client/src/assets/sitemap.xml index b6b8a70e9..58c9b9673 100644 --- a/apps/client/src/assets/sitemap.xml +++ b/apps/client/src/assets/sitemap.xml @@ -6,70 +6,74 @@ http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> https://ghostfol.io - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/de/blog/2021/07/hallo-ghostfolio - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/about - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/about/changelog - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/blog - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/blog/2021/07/hello-ghostfolio - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/blog/2022/07/ghostfolio-meets-internet-identity - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/blog/2022/07/how-do-i-get-my-finances-in-order - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/blog/2022/08/500-stars-on-github - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 + + + https://ghostfol.io/en/blog/2022/10/hacktoberfest-2022 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/demo - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/faq - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/features - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/markets - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/pricing - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/register - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 https://ghostfol.io/en/resources - 2022-09-01T00:00:00+00:00 + 2022-10-01T00:00:00+00:00 From e45a0ad06883efb46dd5c9be81587b30d95b8637 Mon Sep 17 00:00:00 2001 From: casitu Date: Sat, 1 Oct 2022 18:36:41 +0200 Subject: [PATCH 28/29] Spanish (#1312) * Update messages.es.xlf --- apps/client/src/locales/messages.es.xlf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 3bf01e99a..db319c2bf 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -968,7 +968,7 @@ Fees for - Comisiones por + Comisiones por apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 77,80 @@ -976,7 +976,7 @@ {VAR_PLURAL, plural, =1 {transaction} other {transactions}} - {VAR_PLURAL, plural, =1 {transaction} otras {transactions}} + {VAR_PLURAL, plural, =1 {transacción} otras {transacciones}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 78,79 @@ -1460,7 +1460,7 @@ Update account - Mejorar cuenta + Editar cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 2 From f4b63b5de59e744888049ebecd1100ed1abf06d7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Oct 2022 18:39:15 +0200 Subject: [PATCH 29/29] Release 1.201.0 (#1313) --- CHANGELOG.md | 3 ++- package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73aae3b1a..f5c492add 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.201.0 - 01.10.2022 ### Added @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the usage of the value component in the admin control panel +- Improved the language localization for Español (`es`) ### Fixed diff --git a/package.json b/package.json index cac3f8828..88104a57f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.200.0", + "version": "1.201.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": {