Merge branch 'main' of github.com:ghostfolio/ghostfolio
All checks were successful
Docker image CD / build_and_push (push) Successful in 21m36s

This commit is contained in:
sudacode 2025-05-09 06:00:45 -07:00
commit 7af153a161
4 changed files with 107 additions and 113 deletions

View File

@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved the language localization for Catalan (`ca`)
- Improved the language localization for Italian (`it`)
- Upgraded `nestjs` from version `10.4.15` to `11.0.12`
## 2.161.0 - 2025-05-06

View File

@ -21,38 +21,31 @@ export class ApiKeyStrategy extends PassportStrategy(
private readonly prismaService: PrismaService,
private readonly userService: UserService
) {
super({ header: HEADER_KEY_TOKEN, prefix: 'Api-Key ' }, true);
super({ header: HEADER_KEY_TOKEN, prefix: 'Api-Key ' }, false);
}
public async validate(
apiKey: string,
done: (error: any, user?: any) => void
) {
try {
const user = await this.validateApiKey(apiKey);
public async validate(apiKey: string) {
const user = await this.validateApiKey(apiKey);
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
if (hasRole(user, 'INACTIVE')) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
StatusCodes.TOO_MANY_REQUESTS
);
}
await this.prismaService.analytics.upsert({
create: { User: { connect: { id: user.id } } },
update: {
activityCount: { increment: 1 },
lastRequestAt: new Date()
},
where: { userId: user.id }
});
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
if (hasRole(user, 'INACTIVE')) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
StatusCodes.TOO_MANY_REQUESTS
);
}
done(null, user);
} catch (error) {
done(error, null);
await this.prismaService.analytics.upsert({
create: { User: { connect: { id: user.id } } },
update: {
activityCount: { increment: 1 },
lastRequestAt: new Date()
},
where: { userId: user.id }
});
}
return user;
}
private async validateApiKey(apiKey: string) {

View File

@ -2716,8 +2716,8 @@
</trans-unit>
<trans-unit id="2f13d7cb644a3f330e3dd3613be87f2ea57c44a1" datatype="html">
<source>Get a comprehensive financial overview by adding your bank and brokerage accounts.</source>
<target state="translated">Obtingueu una visió financera completa afegint els vostres comptes bancaris i de corredoria.</target>
<context-group purpose="location">
<target state="translated">Obtingueu una visió financera completa afegint els vostres comptes bancaris i de corredoria.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
<context context-type="linenumber">17</context>
</context-group>
@ -2732,8 +2732,8 @@
</trans-unit>
<trans-unit id="80c8f0ef9eb8f28bdb327674ce54dfc2431d3959" datatype="html">
<source>Record your investment activities to keep your portfolio up to date.</source>
<target state="translated">Registra les teves activitats dinversió per mantenir la teva cartera actualitzada.</target>
<context-group purpose="location">
<target state="translated">Registra les teves activitats dinversió per mantenir la teva cartera actualitzada.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-overview/home-overview.html</context>
<context context-type="linenumber">26</context>
</context-group>
@ -3004,7 +3004,7 @@
</trans-unit>
<trans-unit id="98fc3013bfcbf452b9f37bbfcdb77b9b882866e3" datatype="html">
<source>Excluded from Analysis</source>
<target state="translated">Exclòs de l'anàlisi</target>
<target state="translated">Exclòs de lanàlisi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html</context>
<context context-type="linenumber">240</context>

View File

@ -1268,7 +1268,7 @@
</trans-unit>
<trans-unit id="5403336912114537863" datatype="html">
<source>Please set the amount of your emergency fund.</source>
<target state="new">Inserisci limporto del tuo fondo di emergenza:</target>
<target state="translated">Inserisci limporto del tuo fondo di emergenza:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts</context>
<context context-type="linenumber">64</context>
@ -1616,7 +1616,7 @@
</trans-unit>
<trans-unit id="1257540657265073416" datatype="html">
<source>Please enter your coupon code.</source>
<target state="new">Inserisci il tuo codice del buono:</target>
<target state="translated">Inserisci il tuo codice del buono:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context>
<context context-type="linenumber">201</context>
@ -2824,7 +2824,7 @@
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
<source> Hello, <x id="INTERPOLATION" equiv-text="{{ publicPortfolioDetails?.alias ?? defaultAlias }}"/> has shared a <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portfolio<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> with you! </source>
<target state="new">Salve, <x id="INTERPOLATION" equiv-text="{{ portfolioPublicDetails?.alias ?? defaultAlias }}"/> ha condiviso un <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portafoglio<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> con te! </target>
<target state="translated">Salve, <x id="INTERPOLATION" equiv-text="{{ portfolioPublicDetails?.alias ?? defaultAlias }}"/> ha condiviso un <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/>Portafoglio<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> con te! </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
<context context-type="linenumber">4</context>
@ -7037,7 +7037,7 @@
</trans-unit>
<trans-unit id="76897e07c5670ce3b7710cc10c5e1c08b5f6a83a" datatype="html">
<source><x id="START_BLOCK_IF" equiv-text="@if ( SymbolProfile?.currency &amp;&amp; data.baseCurrency !== SymbolProfile?.currency ) {"/> Change with currency effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Change <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></source>
<target state="new"><x id="START_BLOCK_IF" equiv-text="Currency !== SymbolProfile?.currency ) {"/> Cambio con effetto valuta <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Cambia <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<target state="translated"><x id="START_BLOCK_IF" equiv-text="Currency !== SymbolProfile?.currency ) {"/> Cambio con effetto valuta <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Cambia <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">50</context>
@ -7045,7 +7045,7 @@
</trans-unit>
<trans-unit id="65ff514a2e167229e1a34b3712f2cf2908576d0f" datatype="html">
<source><x id="START_BLOCK_IF" equiv-text="@if ( SymbolProfile?.currency &amp;&amp; data.baseCurrency !== SymbolProfile?.currency ) {"/> Performance with currency effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Performance <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></source>
<target state="new"><x id="START_BLOCK_IF" equiv-text="Currency !== SymbolProfile?.currency ) {"/> Prestazioni con effetto valuta <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Prestazioni <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<target state="translated"><x id="START_BLOCK_IF" equiv-text="Currency !== SymbolProfile?.currency ) {"/> Prestazioni con effetto valuta <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Prestazioni <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">69</context>
@ -7277,7 +7277,7 @@
</trans-unit>
<trans-unit id="8af1a18460a6a5a33c19443ae14a0417c3a9c023" datatype="html">
<source>Set API key</source>
<target state="new">Imposta API Key</target>
<target state="translated">Imposta API Key</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">83</context>
@ -7285,7 +7285,7 @@
</trans-unit>
<trans-unit id="6973601224334878334" datatype="html">
<source>Get access to 80000+ tickers from over 50 exchanges</source>
<target state="new">Ottieni accesso a oltre 100000+ titoli da oltre 50 borse</target>
<target state="translated">Ottieni accesso a oltre 80000+ titoli da oltre 50 borse</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
@ -7359,7 +7359,7 @@
</trans-unit>
<trans-unit id="9e4b86d0c90183298e882b02d41aab3c2017f8e8" datatype="html">
<source>Threshold range</source>
<target state="new">Threshold range</target>
<target state="translated">Range soglia</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html</context>
<context context-type="linenumber">9</context>
@ -7367,7 +7367,7 @@
</trans-unit>
<trans-unit id="f907cfe9cf0c373052ff3964f941a5b784c57f06" datatype="html">
<source> Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy. </source>
<target state="new"> Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy. </target>
<target state="translated"> Ghostfolio X-ray utilizza lanalisi statica per scoprire potenziali problemi e rischi nel tuo portafoglio. Modifica le regole qui sotto e imposta soglie personalizzate per allinearti alla tua strategia di investimento personale. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">5</context>
@ -7375,7 +7375,7 @@
</trans-unit>
<trans-unit id="d3e4b4ce50139bdb8e2ba2703e5e3b2417c0c832" datatype="html">
<source>Economic Market Cluster Risks</source>
<target state="new">Economic Market Cluster Risks</target>
<target state="translated">Rischi del cluster di mercato economico</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">165</context>
@ -7383,7 +7383,7 @@
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
<source>of</source>
<target state="new">of</target>
<target state="translated">di</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">52</context>
@ -7391,7 +7391,7 @@
</trans-unit>
<trans-unit id="d666fa5e7e930b82f6c790ccdfe03526664229de" datatype="html">
<source>daily requests</source>
<target state="new">daily requests</target>
<target state="translated">richieste giornaliere</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">54</context>
@ -7399,7 +7399,7 @@
</trans-unit>
<trans-unit id="ab92acbb19a07fb231c67bb8b89c5840087570aa" datatype="html">
<source>Remove API key</source>
<target state="new">Remove API key</target>
<target state="translated">Rimuovi API key</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">71</context>
@ -7407,7 +7407,7 @@
</trans-unit>
<trans-unit id="5649402767950535555" datatype="html">
<source>Do you really want to delete the API key?</source>
<target state="new">Do you really want to delete the API key?</target>
<target state="translated">Vuoi davvero eliminare lAPI key?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.ts</context>
<context context-type="linenumber">96</context>
@ -7415,7 +7415,7 @@
</trans-unit>
<trans-unit id="1486033335993102285" datatype="html">
<source>Please enter your Ghostfolio API key:</source>
<target state="new">Please enter your Ghostfolio API key:</target>
<target state="translated">Inserisci la tua API key di Ghostfolio:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/api/api-page.component.ts</context>
<context context-type="linenumber">41</context>
@ -7423,7 +7423,7 @@
</trans-unit>
<trans-unit id="a651ea4f13e3034518dd3d096958ab482d51b7a5" datatype="html">
<source> I have an API key </source>
<target state="new"> I have an API key </target>
<target state="translated"> Ho un API key </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
<context context-type="linenumber">39</context>
@ -7431,7 +7431,7 @@
</trans-unit>
<trans-unit id="4405ffa42898e217fcb92b7d1f08bb91ef895ed8" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<target state="translated">Richieste API oggi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">178</context>
@ -7439,7 +7439,7 @@
</trans-unit>
<trans-unit id="6461489707382666493" datatype="html">
<source>Could not generate an API key</source>
<target state="new">Could not generate an API key</target>
<target state="translated">Non è stato possibile generare un API key</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context>
<context context-type="linenumber">127</context>
@ -7447,7 +7447,7 @@
</trans-unit>
<trans-unit id="9173945515149078768" datatype="html">
<source>Set this API key in your self-hosted environment:</source>
<target state="new">Set this API key in your self-hosted environment:</target>
<target state="translated">Imposta questa API key nel tuo ambiente self-hosted:</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context>
<context context-type="linenumber">142</context>
@ -7455,7 +7455,7 @@
</trans-unit>
<trans-unit id="7954609080122968528" datatype="html">
<source>Ghostfolio Premium Data Provider API Key</source>
<target state="new">Ghostfolio Premium Data Provider API Key</target>
<target state="translated">API Key for Ghostfolio Premium Data Provider</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context>
<context context-type="linenumber">145</context>
@ -7463,7 +7463,7 @@
</trans-unit>
<trans-unit id="7165424720111432862" datatype="html">
<source>Do you really want to generate a new API key?</source>
<target state="new">Do you really want to generate a new API key?</target>
<target state="translated">Vuoi davvero generare una nuova API key?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-membership/user-account-membership.component.ts</context>
<context context-type="linenumber">150</context>
@ -7471,7 +7471,7 @@
</trans-unit>
<trans-unit id="337ca2e5eeea28eaca91e8511eb5eaafdb385ce6" datatype="html">
<source>Tag</source>
<target state="new">Tag</target>
<target state="translated">Tag</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">157</context>
@ -7479,7 +7479,7 @@
</trans-unit>
<trans-unit id="258c041e93862316871096965e2d70579282fb1a" datatype="html">
<source>API Key</source>
<target state="new">API Key</target>
<target state="translated">API Key</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.html</context>
<context context-type="linenumber">18</context>
@ -7487,7 +7487,7 @@
</trans-unit>
<trans-unit id="0ad3c057fbf21b81a1f1d0bad8b9ee4b284139ab" datatype="html">
<source>Generate Ghostfolio Premium Data Provider API key for self-hosted environments...</source>
<target state="new">Generate Ghostfolio Premium Data Provider API key for self-hosted environments...</target>
<target state="translated">Genera API key per Ghostfolio Premium Data Provider per ambienti self-hosted...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.html</context>
<context context-type="linenumber">26</context>
@ -7495,7 +7495,7 @@
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<target state="translated">fuori</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">56</context>
@ -7503,7 +7503,7 @@
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<target state="translated">le regole si allineano con il tuo portafoglio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">58</context>
@ -7511,7 +7511,7 @@
</trans-unit>
<trans-unit id="3768927257183755959" datatype="html">
<source>Save</source>
<target state="new">Save</target>
<target state="translated">Salva</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts</context>
<context context-type="linenumber">62</context>
@ -7519,7 +7519,7 @@
</trans-unit>
<trans-unit id="c8b54fb8af53c13793e37377e06bbcd3c7dc2c7d" datatype="html">
<source>Asset Class Cluster Risks</source>
<target state="new">Asset Class Cluster Risks</target>
<target state="translated">Rischi del cluster di classi di asset</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">117</context>
@ -7527,7 +7527,7 @@
</trans-unit>
<trans-unit id="7156797854368699223" datatype="html">
<source>Me</source>
<target state="new">Me</target>
<target state="translated">Me</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">135</context>
@ -7535,7 +7535,7 @@
</trans-unit>
<trans-unit id="110cc6cb39e1806d3775fd76f1d0753c9bc0e062" datatype="html">
<source>Received Access</source>
<target state="new">Received Access</target>
<target state="translated">Accesso ricevuto</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.html</context>
<context context-type="linenumber">3</context>
@ -7543,7 +7543,7 @@
</trans-unit>
<trans-unit id="4068738931505527681" datatype="html">
<source>Please enter your Ghostfolio API key.</source>
<target state="new">Please enter your Ghostfolio API key.</target>
<target state="translated">Inserisci la tua API key di Ghostfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts</context>
<context context-type="linenumber">57</context>
@ -7551,7 +7551,7 @@
</trans-unit>
<trans-unit id="7826234236931647519" datatype="html">
<source>AI prompt has been copied to the clipboard</source>
<target state="new">AI prompt has been copied to the clipboard</target>
<target state="translated">LAI prompt è stato copiato negli appunti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">173</context>
@ -7559,7 +7559,7 @@
</trans-unit>
<trans-unit id="1616747898909934803" datatype="html">
<source>Link has been copied to the clipboard</source>
<target state="new">Link has been copied to the clipboard</target>
<target state="translated">Il link è stato copiato negli appunti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/access-table/access-table.component.ts</context>
<context context-type="linenumber">65</context>
@ -7567,7 +7567,7 @@
</trans-unit>
<trans-unit id="4499ce8c46ad55564b23a42ed752e72984c0248f" datatype="html">
<source>Early Access</source>
<target state="new">Early Access</target>
<target state="translated">Accesso anticipato</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">29</context>
@ -7575,7 +7575,7 @@
</trans-unit>
<trans-unit id="189ecd7821c0e70fd7b29d9255600d3157865b3b" datatype="html">
<source>Regional Market Cluster Risks</source>
<target state="new">Regional Market Cluster Risks</target>
<target state="translated">Rischi del cluster di mercato regionale</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">189</context>
@ -7583,7 +7583,7 @@
</trans-unit>
<trans-unit id="8540986733881734625" datatype="html">
<source>Lazy</source>
<target state="new">Lazy</target>
<target state="translated">Pigro</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">138</context>
@ -7591,7 +7591,7 @@
</trans-unit>
<trans-unit id="6882618704933649036" datatype="html">
<source>Instant</source>
<target state="new">Instant</target>
<target state="translated">Istantaneo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">142</context>
@ -7599,7 +7599,7 @@
</trans-unit>
<trans-unit id="47969a4a0916bea5385b42c18749e32a35f07bd7" datatype="html">
<source>Default Market Price</source>
<target state="new">Default Market Price</target>
<target state="translated">Prezzo di mercato predefinito</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">386</context>
@ -7607,7 +7607,7 @@
</trans-unit>
<trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">
<source>Mode</source>
<target state="new">Mode</target>
<target state="translated">Modalità</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">423</context>
@ -7615,7 +7615,7 @@
</trans-unit>
<trans-unit id="5de9d226db382155f482a557b832da6d63108112" datatype="html">
<source>Selector</source>
<target state="new">Selector</target>
<target state="translated">Selettore</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">439</context>
@ -7623,7 +7623,7 @@
</trans-unit>
<trans-unit id="135a208952e884a5ee78533cc4cc8559c702d555" datatype="html">
<source>HTTP Request Headers</source>
<target state="new">HTTP Request Headers</target>
<target state="translated">Intestazioni della richiesta HTTP</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">399</context>
@ -7631,7 +7631,7 @@
</trans-unit>
<trans-unit id="8635324470284879211" datatype="html">
<source>end of day</source>
<target state="new">end of day</target>
<target state="translated">fine giornata</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">138</context>
@ -7639,7 +7639,7 @@
</trans-unit>
<trans-unit id="4547068148181074902" datatype="html">
<source>real-time</source>
<target state="new">real-time</target>
<target state="translated">in tempo reale</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">142</context>
@ -7647,7 +7647,7 @@
</trans-unit>
<trans-unit id="7109040016560023658" datatype="html">
<source>Open Duck.ai</source>
<target state="new">Open Duck.ai</target>
<target state="translated">Apri Duck.ai</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts</context>
<context context-type="linenumber">174</context>
@ -7655,7 +7655,7 @@
</trans-unit>
<trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">
<source>Create</source>
<target state="new">Create</target>
<target state="translated">Creare</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/tags-selector/tags-selector.component.html</context>
<context context-type="linenumber">50</context>
@ -7663,7 +7663,7 @@
</trans-unit>
<trans-unit id="cdcd7c871f3bc0326ee77e5aea82af1ef26f46f2" datatype="html">
<source>Market Data</source>
<target state="new">Market Data</target>
<target state="translated">Dati di mercato</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">374</context>
@ -7671,7 +7671,7 @@
</trans-unit>
<trans-unit id="1230154438678955604" datatype="html">
<source>Change</source>
<target state="new">Change</target>
<target state="translated">Cambia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/treemap-chart/treemap-chart.component.ts</context>
<context context-type="linenumber">365</context>
@ -7679,7 +7679,7 @@
</trans-unit>
<trans-unit id="1322586333669103999" datatype="html">
<source>Performance</source>
<target state="new">Performance</target>
<target state="translated">Prestazione</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/treemap-chart/treemap-chart.component.ts</context>
<context context-type="linenumber">365</context>
@ -7691,7 +7691,7 @@
</trans-unit>
<trans-unit id="afd6e2886f0bb7db3b54bef42bced4e7c67cc40c" datatype="html">
<source>Copy portfolio data to clipboard for AI prompt</source>
<target state="new">Copy portfolio data to clipboard for AI prompt</target>
<target state="translated">Copia i dati del portafoglio negli appunti per lAI prompt</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">42</context>
@ -7699,7 +7699,7 @@
</trans-unit>
<trans-unit id="187b68f90f45d63f0d3b1e830ac92f98d2447313" datatype="html">
<source>Copy AI prompt to clipboard for analysis</source>
<target state="new">Copy AI prompt to clipboard for analysis</target>
<target state="translated">Copia lAI prompt negli appunti per lanalisi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/analysis/analysis-page.html</context>
<context context-type="linenumber">67</context>
@ -7707,7 +7707,7 @@
</trans-unit>
<trans-unit id="5004849258025239958" datatype="html">
<source>Armenia</source>
<target state="new">Armenia</target>
<target state="translated">Armenia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">73</context>
@ -7715,7 +7715,7 @@
</trans-unit>
<trans-unit id="7899437916897426237" datatype="html">
<source>British Virgin Islands</source>
<target state="new">British Virgin Islands</target>
<target state="translated">Isole Vergini Britanniche</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">77</context>
@ -7723,7 +7723,7 @@
</trans-unit>
<trans-unit id="4830118002486243553" datatype="html">
<source>Singapore</source>
<target state="new">Singapore</target>
<target state="translated">Singapore</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
@ -7731,7 +7731,7 @@
</trans-unit>
<trans-unit id="e9048704780ed5bb3fc1af4f94d4fc5fdeb72cab" datatype="html">
<source>Terms and Conditions</source>
<target state="new">Terms and Conditions</target>
<target state="translated">Termini e condizioni</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">15</context>
@ -7739,7 +7739,7 @@
</trans-unit>
<trans-unit id="4051385e7211aebdb652666927a0564de3e74fd0" datatype="html">
<source>Please keep your security token safe. If you lose it, you will not be able to recover your account.</source>
<target state="new">Please keep your security token safe. If you lose it, you will not be able to recover your account.</target>
<target state="translated">Ti preghiamo di conservare il tuo token di sicurezza in un luogo sicuro. Se lo perdi, non sarai in grado di recuperare il tuo account.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">18</context>
@ -7747,7 +7747,7 @@
</trans-unit>
<trans-unit id="e141c59c32512fb4bf6ebe67e65136eb80443f40" datatype="html">
<source>I understand that if I lose my security token, I cannot recover my account</source>
<target state="new">I understand that if I lose my security token, I cannot recover my account</target>
<target state="translated">Capisco che se perdo il mio token di sicurezza, non posso recuperare il mio account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">28</context>
@ -7755,7 +7755,7 @@
</trans-unit>
<trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">
<source>Continue</source>
<target state="new">Continue</target>
<target state="translated">Continua</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">57</context>
@ -7763,7 +7763,7 @@
</trans-unit>
<trans-unit id="43a04e6b986ac8b5184330fdcc4235867d48bcf7" datatype="html">
<source>Here is your security token. It is only visible once, please store and keep it in a safe place.</source>
<target state="new">Here is your security token. It is only visible once, please store and keep it in a safe place.</target>
<target state="translated">Ecco il tuo token di sicurezza. È visibile solo una volta, per favore memorizzalo e conserva in un luogo sicuro.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">67</context>
@ -7771,7 +7771,7 @@
</trans-unit>
<trans-unit id="8944214829054650479" datatype="html">
<source>Security token</source>
<target state="new">Security token</target>
<target state="translated">Token di sicurezza</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.component.ts</context>
<context context-type="linenumber">163</context>
@ -7779,7 +7779,7 @@
</trans-unit>
<trans-unit id="6751986162338860240" datatype="html">
<source>Do you really want to generate a new security token for this user?</source>
<target state="new">Do you really want to generate a new security token for this user?</target>
<target state="translated">Vuoi davvero generare un nuovo token di sicurezza per questo utente?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.component.ts</context>
<context context-type="linenumber">168</context>
@ -7787,7 +7787,7 @@
</trans-unit>
<trans-unit id="bb9188e6fbfd19db7f6ba5433592beaff50da35d" datatype="html">
<source>Generate Security Token</source>
<target state="new">Generate Security Token</target>
<target state="translated">Genera Token di Sicurezza</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">249</context>
@ -7795,7 +7795,7 @@
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<target state="tramslated">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
@ -7803,7 +7803,7 @@
</trans-unit>
<trans-unit id="aa4f4b7c81ae9cabfcebc2173f31e3f4bf08d833" datatype="html">
<source>Terms of Service</source>
<target state="new">Terms of Service</target>
<target state="translated">Termini e condizioni</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/app.component.html</context>
<context context-type="linenumber">112</context>
@ -7811,7 +7811,7 @@
</trans-unit>
<trans-unit id="814674835685440667" datatype="html">
<source>terms-of-service</source>
<target state="new">terms-of-service</target>
<target state="translated">termini-e-condizioni</target>
<note priority="1" from="description">snake-case</note>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/app.component.ts</context>
@ -7832,7 +7832,7 @@
</trans-unit>
<trans-unit id="2029980907058777630" datatype="html">
<source>Terms of Service</source>
<target state="new">Terms of Service</target>
<target state="translated">Termini e condizioni</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/about/about-page.component.ts</context>
<context context-type="linenumber">71</context>
@ -7844,7 +7844,7 @@
</trans-unit>
<trans-unit id="a684aee80d027f65327cd8c6e45ea8b91cf5d054" datatype="html">
<source> Terms of Service </source>
<target state="new"> Terms of Service </target>
<target state="translated"> Termini e condizioni </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.html</context>
<context context-type="linenumber">4</context>
@ -7852,7 +7852,7 @@
</trans-unit>
<trans-unit id="beec5722b9f2e26e0c70c7d7f7ed53c313b5dc5a" datatype="html">
<source>and I agree to the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a class=&quot;font-weight-bold&quot; target=&quot;_blank&quot; [routerLink]=&quot;routerLinkAboutTermsOfService&quot; &gt;"/>Terms of Service<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>.</source>
<target state="new">and I agree to the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a class=&quot;font-weight-bold&quot; target=&quot;_blank&quot; [routerLink]=&quot;routerLinkAboutTermsOfService&quot; &gt;"/>Terms of Service<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>.</target>
<target state="translated">e io accetto i <x id="START_LINK" ctype="x-a" equiv-text="&lt;a class=&quot;font-weight-bold&quot; target=&quot;_blank&quot; [routerLink]=&quot;routerLinkAboutTermsOfService&quot; &gt;"/>Termini e condizioni<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/>.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
<context context-type="linenumber">34</context>
@ -7860,7 +7860,7 @@
</trans-unit>
<trans-unit id="3606972039333274390" datatype="html">
<source><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</source>
<target state="new"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) is already in use.</target>
<target state="translated"><x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>) e gia in uso.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">462</context>
@ -7868,7 +7868,7 @@
</trans-unit>
<trans-unit id="5612909502553004436" datatype="html">
<source>An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</source>
<target state="new">An error occurred while updating to <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<target state="translated">Si è verificato un errore durante laggiornamento di <x id="PH" equiv-text="assetProfileIdentifier.symbol"/> (<x id="PH_1" equiv-text="assetProfileIdentifier.dataSource"/>).</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">470</context>
@ -7876,7 +7876,7 @@
</trans-unit>
<trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html">
<source>Apply</source>
<target state="new">Apply</target>
<target state="translated">Applica</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">138</context>
@ -7884,7 +7884,7 @@
</trans-unit>
<trans-unit id="f60c9276bebb4445596e3864f2f825c95b154ada" datatype="html">
<source>with API access for</source>
<target state="new">with API access for</target>
<target state="translated">con accesso API per</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">266</context>
@ -7892,7 +7892,7 @@
</trans-unit>
<trans-unit id="d59937471dbd9dee61cfd6402c3963bbfccc7b2b" datatype="html">
<source>Gather Recent Historical Market Data</source>
<target state="new">Gather Recent Historical Market Data</target>
<target state="translated">Raccogli dati storici di mercato recenti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">226</context>
@ -7900,7 +7900,7 @@
</trans-unit>
<trans-unit id="7faff7a8ef4065b33ebb2e88a54183bf1b124525" datatype="html">
<source>Gather All Historical Market Data</source>
<target state="new">Gather All Historical Market Data</target>
<target state="translated">Raccogli tutti i dati storici di mercato</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">231</context>
@ -7908,7 +7908,7 @@
</trans-unit>
<trans-unit id="62b4a1aa9dbd2b3b744d7bcc726176640978364d" datatype="html">
<source>Gather Historical Market Data</source>
<target state="new">Gather Historical Market Data</target>
<target state="translated">Raccogli dati storici di mercato</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">29</context>
@ -7916,7 +7916,7 @@
</trans-unit>
<trans-unit id="82dddef5b7b438a8292c0ab4c0cf2955ef95fdda" datatype="html">
<source>Data Gathering is off</source>
<target state="new">Data Gathering is off</target>
<target state="translated">La raccolta dei dati è disattivata</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">38</context>
@ -7924,7 +7924,7 @@
</trans-unit>
<trans-unit id="3554d4201718e0ac1637ef3833c0fbe8aa6ffadb" datatype="html">
<source>Performance Calculation</source>
<target state="new">Performance Calculation</target>
<target state="translated">Calcolo delle prestazioni</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">31</context>
@ -7932,7 +7932,7 @@
</trans-unit>
<trans-unit id="322229249598827754" datatype="html">
<source>someone</source>
<target state="new">someone</target>
<target state="translated">qualcuno</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.component.ts</context>
<context context-type="linenumber">33</context>
@ -7940,7 +7940,7 @@
</trans-unit>
<trans-unit id="1efa64b89c9852e7099159ab06af9dcf49870438" datatype="html">
<source>Add asset to watchlist</source>
<target state="new">Add asset to watchlist</target>
<target state="translated">Aggiungi asset alla watchlist</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html</context>
<context context-type="linenumber">7</context>
@ -7948,7 +7948,7 @@
</trans-unit>
<trans-unit id="7a6d28bd1c36c8298c95b7965abf226b218be50d" datatype="html">
<source>Watchlist</source>
<target state="new">Watchlist</target>
<target state="translated">Watchlist</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context>
@ -7960,7 +7960,7 @@
</trans-unit>
<trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source>
<target state="new">Watchlist</target>
<target state="translated">Watchlist</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page-routing.module.ts</context>
<context context-type="linenumber">44</context>
@ -7972,7 +7972,7 @@
</trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">
<source>Get Early Access</source>
<target state="new">Get Early Access</target>
<target state="translated">Ottieni accesso anticipato</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html</context>
<context context-type="linenumber">29</context>
@ -7980,7 +7980,7 @@
</trans-unit>
<trans-unit id="627795342008207050" datatype="html">
<source>Do you really want to delete this item?</source>
<target state="new">Do you really want to delete this item?</target>
<target state="translated">Vuoi davvero eliminare questo elemento?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.ts</context>
<context context-type="linenumber">122</context>