From d1190fc15a6d9f49ddeb71c28c95fbae2459b4ba Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 8 Nov 2025 17:57:01 +0100 Subject: [PATCH 01/10] Task/upgrade svgmap to version 2.14.0 (#5904) * Upgrade svgmap to version 2.14.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fc83484d..8a503cc42 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 ### Changed - Upgraded `chart.js` from version `4.5.0` to `4.5.1` +- Upgraded `svgmap` from version `2.12.2` to `2.14.0` ## 2.215.0 - 2025-11-06 diff --git a/package-lock.json b/package-lock.json index ca3a9f30e..c33710231 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,7 @@ "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "stripe": "18.5.0", - "svgmap": "2.12.2", + "svgmap": "2.14.0", "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", "uuid": "11.1.0", @@ -38794,9 +38794,9 @@ "license": "BSD-2-Clause" }, "node_modules/svgmap": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/svgmap/-/svgmap-2.12.2.tgz", - "integrity": "sha512-SCX1Oys3v1dz3mTEbQha+6lrHGyu3LwXBhcgW0HlTh7waQDMFqNUKD8hADvDaPkPapRvNCLMnXaVD1Pbxbnhow==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/svgmap/-/svgmap-2.14.0.tgz", + "integrity": "sha512-+Vklx4DO1uv1SFq6wnJWl/dRjX4uRT9CcsIHuADxAcZ+h5X1OSyDVbNdIu837fx5TtYYuaGRhWuFCXIioN/1ww==", "license": "MIT", "dependencies": { "svg-pan-zoom": "^3.6.2" diff --git a/package.json b/package.json index 829eb2bde..ff7f05ea0 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "stripe": "18.5.0", - "svgmap": "2.12.2", + "svgmap": "2.14.0", "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", "uuid": "11.1.0", From 9383fc00cb61482e162df7fa6dcfcdbe32626b23 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 9 Nov 2025 07:44:53 +0100 Subject: [PATCH 02/10] Task/introduce interface for get account response (#5902) * Introduce interface for get account response --- apps/api/src/app/account/account.controller.ts | 8 +++----- apps/client/src/app/services/data.service.ts | 4 ++-- libs/common/src/lib/interfaces/index.ts | 2 ++ .../interfaces/responses/account-response.interface.ts | 3 +++ 4 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 libs/common/src/lib/interfaces/responses/account-response.interface.ts diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index 7b24ccdcb..cd6892ab8 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -9,13 +9,11 @@ import { ImpersonationService } from '@ghostfolio/api/services/impersonation/imp import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; import { AccountBalancesResponse, + AccountResponse, AccountsResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; -import type { - AccountWithValue, - RequestWithUser -} from '@ghostfolio/common/types'; +import type { RequestWithUser } from '@ghostfolio/common/types'; import { Body, @@ -114,7 +112,7 @@ export class AccountController { public async getAccountById( @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Param('id') id: string - ): Promise { + ): Promise { const impersonationUserId = await this.impersonationService.validateImpersonationId(impersonationId); diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 6f0b17ed1..f83746009 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -22,6 +22,7 @@ import { Access, AccessTokenResponse, AccountBalancesResponse, + AccountResponse, AccountsResponse, ActivitiesResponse, ActivityResponse, @@ -54,7 +55,6 @@ import { } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; import type { - AccountWithValue, AiPromptMode, DateRange, GroupBy @@ -186,7 +186,7 @@ export class DataService { } public fetchAccount(aAccountId: string) { - return this.http.get(`/api/v1/account/${aAccountId}`); + return this.http.get(`/api/v1/account/${aAccountId}`); } public fetchAccountBalances(aAccountId: string) { diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 899813f30..5c516a4a6 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -36,6 +36,7 @@ import type { Position } from './position.interface'; import type { Product } from './product'; import type { AccessTokenResponse } from './responses/access-token-response.interface'; import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; +import type { AccountResponse } from './responses/account-response.interface'; import type { AccountsResponse } from './responses/accounts-response.interface'; import type { ActivitiesResponse } from './responses/activities-response.interface'; import type { ActivityResponse } from './responses/activity-response.interface'; @@ -86,6 +87,7 @@ export { AccessTokenResponse, AccountBalance, AccountBalancesResponse, + AccountResponse, AccountsResponse, ActivitiesResponse, ActivityResponse, diff --git a/libs/common/src/lib/interfaces/responses/account-response.interface.ts b/libs/common/src/lib/interfaces/responses/account-response.interface.ts new file mode 100644 index 000000000..3e954dc72 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/account-response.interface.ts @@ -0,0 +1,3 @@ +import { AccountWithValue } from '@ghostfolio/common/types'; + +export interface AccountResponse extends AccountWithValue {} From 385d7f65629422b256d7ad55e6f960f032febc2b Mon Sep 17 00:00:00 2001 From: TMs Date: Tue, 11 Nov 2025 03:19:38 +0700 Subject: [PATCH 03/10] Feature/improve language localization for ZH 20251110 (#5928) * Improve language localization for ZH * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.zh.xlf | 118 ++++++++++++------------ 2 files changed, 60 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a503cc42..4a4adc311 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 ### Changed +- Improved the language localization for Chinese (`zh`) - Upgraded `chart.js` from version `4.5.0` to `4.5.1` - Upgraded `svgmap` from version `2.12.2` to `2.14.0` diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 1595ea726..d5090164d 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -241,7 +241,7 @@ please - please + apps/client/src/app/pages/pricing/pricing-page.html 350 @@ -285,7 +285,7 @@ with - with + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 87 @@ -665,7 +665,7 @@ and is driven by the efforts of its contributors - and is driven by the efforts of its contributors + 并且得益于其 贡献者 apps/client/src/app/pages/about/overview/about-overview-page.html 49 @@ -965,7 +965,7 @@ and we share aggregated key metrics of the platform’s performance - and we share aggregated key metrics of the platform’s performance + 并且我们分享平台性能的聚合 关键指标 apps/client/src/app/pages/about/overview/about-overview-page.html 32 @@ -1181,7 +1181,7 @@ Activities - Activities + 活动 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 61 @@ -1233,7 +1233,7 @@ Current year - Current year + 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 204 @@ -1545,7 +1545,7 @@ The source code is fully available as open source software (OSS) under the AGPL-3.0 license - The source code is fully available as open source software (OSS) under the AGPL-3.0 license + 源代码完全可用,作为开源软件 (OSS),遵循AGPL-3.0许可证 apps/client/src/app/pages/about/overview/about-overview-page.html 16 @@ -1609,7 +1609,7 @@ Current week - Current week + 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 196 @@ -2517,7 +2517,7 @@ for - for + 用于 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 128 @@ -2953,7 +2953,7 @@ per week - per week + 每周 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 130 @@ -3129,7 +3129,7 @@ Edit access - Edit access + 编辑权限 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 11 @@ -3233,7 +3233,7 @@ Get access to 80’000+ tickers from over 50 exchanges - Get access to 80’000+ tickers from over 50 exchanges + 获取来自 50 多个交易所的 80,000 多个行情的访问权限 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 84 @@ -3369,7 +3369,7 @@ less than - less than + 少于 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 129 @@ -3433,7 +3433,7 @@ Ghostfolio Status - Ghostfolio Status + Ghostfolio 状态 apps/client/src/app/pages/about/overview/about-overview-page.html 62 @@ -3441,7 +3441,7 @@ with your university e-mail address - with your university e-mail address + 使用您的学校电子邮件地址 apps/client/src/app/pages/pricing/pricing-page.html 365 @@ -3473,7 +3473,7 @@ and a safe withdrawal rate (SWR) of - and a safe withdrawal rate (SWR) of + 和安全取款率 (SWR) 为 apps/client/src/app/pages/portfolio/fire/fire-page.html 107 @@ -3497,7 +3497,7 @@ Job ID - Job ID + 作业 ID apps/client/src/app/components/admin-jobs/admin-jobs.html 34 @@ -3709,7 +3709,7 @@ or start a discussion at - or start a discussion at + 或在以下位置开始讨论 apps/client/src/app/pages/about/overview/about-overview-page.html 94 @@ -3897,7 +3897,7 @@ Exclude from Analysis - Exclude from Analysis + 排除在分析之外 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 90 @@ -3921,7 +3921,7 @@ Latest activities - Latest activities + 最新活动 apps/client/src/app/pages/public/public-page.html 211 @@ -3989,7 +3989,7 @@ Looking for a student discount? - Looking for a student discount? + 寻找学生折扣? apps/client/src/app/pages/pricing/pricing-page.html 359 @@ -4165,7 +4165,7 @@ Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover operational costs for the hosting infrastructure and professional data providers, and to fund ongoing development. - 我们的官方 Ghostfolio Premium 云产品是最简单的入门方法。由于它节省了时间,这对于大多数人来说将是最佳选择。收入用于支付托管基础设施的成本和资助持续开发。 + 我们的官方 Ghostfolio Premium 云产品是最简单的入门方法。由于它节省了时间,这对于大多数人来说将是最佳选择。收入用于支付托管基础设施的成本和资助持续开发。 apps/client/src/app/pages/pricing/pricing-page.html 7 @@ -4365,7 +4365,7 @@ Sustainable retirement income - Sustainable retirement income + 可持续的退休收入 apps/client/src/app/pages/portfolio/fire/fire-page.html 40 @@ -4498,7 +4498,7 @@ per month - per month + 每月 apps/client/src/app/pages/portfolio/fire/fire-page.html 92 @@ -4514,7 +4514,7 @@ Website of Thomas Kaul - Website of Thomas Kaul + Thomas Kaul 的网站 apps/client/src/app/pages/about/overview/about-overview-page.html 44 @@ -4642,7 +4642,7 @@ User ID - User ID + 用户 ID apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 12 @@ -4762,7 +4762,7 @@ Request it - Request it + 请求它 apps/client/src/app/pages/pricing/pricing-page.html 361 @@ -4906,7 +4906,7 @@ , - , + , apps/client/src/app/pages/portfolio/fire/fire-page.html 93 @@ -4930,7 +4930,7 @@ contact us - contact us + 联系我们 apps/client/src/app/pages/pricing/pricing-page.html 353 @@ -5318,7 +5318,7 @@ View Details - View Details + 查看详细信息 apps/client/src/app/components/admin-users/admin-users.html 225 @@ -5526,7 +5526,7 @@ If you retire today, you would be able to withdraw - If you retire today, you would be able to withdraw + 如果您今天退休,您将能够提取 apps/client/src/app/pages/portfolio/fire/fire-page.html 66 @@ -5662,7 +5662,7 @@ Argentina - Argentina + 阿根廷 libs/ui/src/lib/i18n.ts 78 @@ -5734,7 +5734,7 @@ Close Holding - Close Holding + 关闭持仓 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 442 @@ -5774,7 +5774,7 @@ here - here + 这里 apps/client/src/app/pages/pricing/pricing-page.html 364 @@ -6011,7 +6011,7 @@ Indonesia - Indonesia + 印度尼西亚 libs/ui/src/lib/i18n.ts 90 @@ -6147,7 +6147,7 @@ Include in - Include in + 包含在 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 369 @@ -6427,7 +6427,7 @@ View Holding - View Holding + 查看持仓 libs/ui/src/lib/activities-table/activities-table.component.html 444 @@ -6571,7 +6571,7 @@ Oops! Could not update access. - Oops! Could not update access. + 哎呀!无法更新访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts 179 @@ -6579,7 +6579,7 @@ based on your total assets of - based on your total assets of + 基于您总资产的 apps/client/src/app/pages/portfolio/fire/fire-page.html 95 @@ -6695,7 +6695,7 @@ Role - Role + 角色 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 31 @@ -6711,7 +6711,7 @@ Accounts - Accounts + 账户 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 @@ -6743,7 +6743,7 @@ If you plan to open an account at - If you plan to open an account at + 如果您计划开通账户在 apps/client/src/app/pages/pricing/pricing-page.html 329 @@ -6775,7 +6775,7 @@ send an e-mail to - send an e-mail to + 发送电子邮件至 apps/client/src/app/pages/about/overview/about-overview-page.html 87 @@ -6855,7 +6855,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year - to use our referral link and get a Ghostfolio Premium membership for one year + 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 apps/client/src/app/pages/pricing/pricing-page.html 357 @@ -6935,7 +6935,7 @@ Ghostfolio is a lightweight wealth management application for individuals to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. - Ghostfolio is a lightweight wealth management application for individuals to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. + Ghostfolio 是一款轻量级的财富管理应用程序,旨在帮助个人跟踪股票、ETF 或加密货币,并做出基于数据的稳健投资决策。 apps/client/src/app/pages/about/overview/about-overview-page.html 10 @@ -7007,7 +7007,7 @@ Engagement per Day - Engagement per Day + 每日参与度 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 76 @@ -7153,7 +7153,7 @@ Country - Country + 国家 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 37 @@ -7261,7 +7261,7 @@ Check the system status at - Check the system status at + 检查系统状态 apps/client/src/app/pages/about/overview/about-overview-page.html 57 @@ -7309,7 +7309,7 @@ API Requests Today - API Requests Today + 今日 API 请求 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 86 @@ -7417,7 +7417,7 @@ The project has been initiated by - The project has been initiated by + 该项目发起于 apps/client/src/app/pages/about/overview/about-overview-page.html 40 @@ -7525,7 +7525,7 @@ Find account, holding or page... - Find account, holding or page... + 查找账户、持仓或页面... libs/ui/src/lib/assistant/assistant.component.ts 152 @@ -7941,7 +7941,7 @@ Current month - Current month + 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 200 @@ -8126,7 +8126,7 @@ If you encounter a bug, would like to suggest an improvement or a new feature, please join the Ghostfolio Slack community, post to @ghostfolio_ - If you encounter a bug, would like to suggest an improvement or a new feature, please join the Ghostfolio Slack community, post to @ghostfolio_ + 如果您遇到错误,想要建议改进或新功能,请加入 Ghostfolio Slack 社区,发布到 @ghostfolio_ apps/client/src/app/pages/about/overview/about-overview-page.html 69 @@ -8250,7 +8250,7 @@ Liquidity - Liquidity + 流动性 apps/client/src/app/pages/i18n/i18n-page.html 70 @@ -8258,7 +8258,7 @@ Buying Power - Buying Power + 购买力 apps/client/src/app/pages/i18n/i18n-page.html 71 @@ -8266,7 +8266,7 @@ Your buying power is below ${thresholdMin} ${baseCurrency} - Your buying power is below ${thresholdMin} ${baseCurrency} + 您的购买力低于 ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 73 @@ -8274,7 +8274,7 @@ Your buying power is 0 ${baseCurrency} - Your buying power is 0 ${baseCurrency} + 您的购买力为 0 ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 77 @@ -8282,7 +8282,7 @@ Your buying power exceeds ${thresholdMin} ${baseCurrency} - Your buying power exceeds ${thresholdMin} ${baseCurrency} + 您的购买力超过了 ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 80 @@ -8586,7 +8586,7 @@ Registration Date - Registration Date + 注册日期 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 23 From 9b4392eee094c225969a1a428728cbdeddc357f9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 10 Nov 2025 22:09:14 +0100 Subject: [PATCH 04/10] Task/improve localization of limited offer (#5929) * Improve localization --- .../user-account-membership/user-account-membership.html | 7 +++++-- apps/client/src/app/pages/pricing/pricing-page.html | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.html b/apps/client/src/app/components/user-account-membership/user-account-membership.html index eadf85612..321efbcdd 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.html +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -37,8 +37,11 @@
- Limited Offer! Get - {{ durationExtension }} extra + Limited Offer! +   + Get {{ durationExtension }} extra
} diff --git a/apps/client/src/app/pages/pricing/pricing-page.html b/apps/client/src/app/pages/pricing/pricing-page.html index bea55f47f..41af9f277 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.html +++ b/apps/client/src/app/pages/pricing/pricing-page.html @@ -310,6 +310,7 @@ class="badge badge-warning font-weight-normal line-height-1 p-3 w-100" > Limited Offer! +   Get {{ durationExtension }} extra From da71ee73d0b2b355d4f4d9d9ed4b237009f97fad Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 10 Nov 2025 22:09:41 +0100 Subject: [PATCH 05/10] Task/improve promotion system (#5930) * Add fallback to promotion logic --- apps/client/src/app/app.component.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index b70850016..de82c7d9c 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -110,10 +110,6 @@ export class GfAppComponent implements OnDestroy, OnInit { this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.info = this.dataService.fetchInfo(); - this.hasPromotion = - !!this.info?.subscriptionOffer?.coupon || - !!this.info?.subscriptionOffer?.durationExtension; - this.impersonationStorageService .onChangeHasImpersonation() .pipe(takeUntil(this.unsubscribeSubject)) @@ -217,9 +213,11 @@ export class GfAppComponent implements OnDestroy, OnInit { this.hasInfoMessage = this.canCreateAccount || !!this.user?.systemMessage; - this.hasPromotion = - !!this.user?.subscription?.offer?.coupon || - !!this.user?.subscription?.offer?.durationExtension; + this.hasPromotion = this.user + ? !!this.user.subscription?.offer?.coupon || + !!this.user.subscription?.offer?.durationExtension + : !!this.info?.subscriptionOffer?.coupon || + !!this.info?.subscriptionOffer?.durationExtension; this.initializeTheme(this.user?.settings.colorScheme); From 332216ae1c90ece5a6ebfe31efc41e256808e7be Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 10 Nov 2025 22:10:42 +0100 Subject: [PATCH 06/10] Task/refactor primary text colors (#5900) * Refactor primary text colors --- apps/client/src/styles.scss | 9 +++++++-- apps/client/src/styles/variables.scss | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 6c9742f23..b7a031bfa 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -1,5 +1,6 @@ @import './styles/bootstrap'; @import './styles/table'; +@import './styles/variables'; @import 'svgmap/dist/svgMap'; @@ -8,14 +9,18 @@ --font-family-sans-serif: 'Inter', Roboto, 'Helvetica Neue', sans-serif; --light-background: rgb(255, 255, 255); - --dark-primary-text: 0, 0, 0, 0.87; + --dark-primary-text: + #{red($dark-primary-text)}, #{green($dark-primary-text)}, + #{blue($dark-primary-text)}, #{alpha($dark-primary-text)}; --dark-secondary-text: 0, 0, 0, 0.54; --dark-accent-text: 0, 0, 0, 0.87; --dark-warn-text: 0, 0, 0, 0.87; --dark-disabled-text: 0, 0, 0, 0.38; --dark-dividers: 0, 0, 0, 0.12; --dark-focused: 0, 0, 0, 0.12; - --light-primary-text: 255, 255, 255, 1; + --light-primary-text: + #{red($light-primary-text)}, #{green($light-primary-text)}, + #{blue($light-primary-text)}, #{alpha($light-primary-text)}; --light-secondary-text: 255, 255, 255, 0.7; --light-accent-text: 255, 255, 255, 1; --light-warn-text: 255, 255, 255, 1; diff --git a/apps/client/src/styles/variables.scss b/apps/client/src/styles/variables.scss index dcf26eecc..061c182fd 100644 --- a/apps/client/src/styles/variables.scss +++ b/apps/client/src/styles/variables.scss @@ -1,4 +1,4 @@ $dark-primary-text: rgba(black, 0.87); -$light-primary-text: white; +$light-primary-text: rgba(white, 1); $mat-css-dark-theme-selector: '.theme-dark'; From 4c3b95353d058c173ac70425f3b551410c895868 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 10 Nov 2025 22:16:08 +0100 Subject: [PATCH 07/10] Release 2.216.0 (#5932) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a4adc311..bc0ef2df9 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 +## 2.216.0 - 2025-11-10 ### Changed diff --git a/package-lock.json b/package-lock.json index c33710231..e44d8a513 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.215.0", + "version": "2.216.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.215.0", + "version": "2.216.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index ff7f05ea0..cc151f19c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.215.0", + "version": "2.216.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From e7270bfee3dd6a94be031fe8c2ae1254cca9ecfd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 11 Nov 2025 20:19:46 +0100 Subject: [PATCH 08/10] Task/improve localization of auto-renewal (#5933) * Improve localization --- .../user-account-membership/user-account-membership.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.html b/apps/client/src/app/components/user-account-membership/user-account-membership.html index 321efbcdd..351d5608a 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.html +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -70,7 +70,7 @@ } @else {
- No auto-renewal. + No auto-renewal on membership.
} From 9f878c42f4ec39673d1c757c30f0b6900385af67 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 11 Nov 2025 20:20:16 +0100 Subject: [PATCH 09/10] Task/refactor getHolding() in portfolio service (#5898) * Refactor getHolding() if no holding has been found * Update changelog --- CHANGELOG.md | 6 + apps/api/src/app/import/import.service.ts | 19 +- .../src/app/portfolio/portfolio.service.ts | 421 ++++++------------ 3 files changed, 166 insertions(+), 280 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc0ef2df9..50e770f2c 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 + +- Refactored the get holding functionality in the portfolio service + ## 2.216.0 - 2025-11-10 ### Changed diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 2ec28365e..669432db5 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -58,13 +58,18 @@ export class ImportService { userId }: AssetProfileIdentifier & { userId: string }): Promise { try { - const { activities, firstBuyDate, historicalData } = - await this.portfolioService.getHolding({ - dataSource, - symbol, - userId, - impersonationId: undefined - }); + const holding = await this.portfolioService.getHolding({ + dataSource, + symbol, + userId, + impersonationId: undefined + }); + + if (!holding) { + return []; + } + + const { activities, firstBuyDate, historicalData } = holding; const [[assetProfile], dividends] = await Promise.all([ this.symbolProfileService.getSymbolProfiles([ diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index b74b779f6..1ae6190e1 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -88,7 +88,6 @@ import { parseISO, set } from 'date-fns'; -import { isEmpty } from 'lodash'; import { PortfolioCalculator } from './calculator/portfolio-calculator'; import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory'; @@ -776,35 +775,7 @@ export class PortfolioService { }); if (activities.length === 0) { - return { - activities: [], - activitiesCount: 0, - averagePrice: undefined, - dataProviderInfo: undefined, - dividendInBaseCurrency: undefined, - dividendYieldPercent: undefined, - dividendYieldPercentWithCurrencyEffect: undefined, - feeInBaseCurrency: undefined, - firstBuyDate: undefined, - grossPerformance: undefined, - grossPerformancePercent: undefined, - grossPerformancePercentWithCurrencyEffect: undefined, - grossPerformanceWithCurrencyEffect: undefined, - historicalData: [], - investmentInBaseCurrencyWithCurrencyEffect: undefined, - marketPrice: undefined, - marketPriceMax: undefined, - marketPriceMin: undefined, - netPerformance: undefined, - netPerformancePercent: undefined, - netPerformancePercentWithCurrencyEffect: undefined, - netPerformanceWithCurrencyEffect: undefined, - performances: undefined, - quantity: undefined, - SymbolProfile: undefined, - tags: [], - value: undefined - }; + return undefined; } const [SymbolProfile] = await this.symbolProfileService.getSymbolProfiles([ @@ -818,7 +789,6 @@ export class PortfolioService { currency: userCurrency }); - const portfolioStart = portfolioCalculator.getStartDate(); const transactionPoints = portfolioCalculator.getTransactionPoints(); const { positions } = await portfolioCalculator.getSnapshot(); @@ -827,225 +797,108 @@ export class PortfolioService { return position.dataSource === dataSource && position.symbol === symbol; }); - if (holding) { - const { - averagePrice, - currency, - dividendInBaseCurrency, - fee, - firstBuyDate, - grossPerformance, - grossPerformancePercentage, - grossPerformancePercentageWithCurrencyEffect, - grossPerformanceWithCurrencyEffect, - investmentWithCurrencyEffect, - marketPrice, - netPerformance, - netPerformancePercentage, - netPerformancePercentageWithCurrencyEffectMap, - netPerformanceWithCurrencyEffectMap, - quantity, - tags, - timeWeightedInvestment, - timeWeightedInvestmentWithCurrencyEffect, - transactionCount - } = holding; - - const activitiesOfHolding = activities.filter(({ SymbolProfile }) => { - return ( - SymbolProfile.dataSource === dataSource && - SymbolProfile.symbol === symbol - ); - }); - - const dividendYieldPercent = getAnnualizedPerformancePercent({ - daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)), - netPerformancePercentage: timeWeightedInvestment.eq(0) - ? new Big(0) - : dividendInBaseCurrency.div(timeWeightedInvestment) - }); - - const dividendYieldPercentWithCurrencyEffect = - getAnnualizedPerformancePercent({ - daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)), - netPerformancePercentage: timeWeightedInvestmentWithCurrencyEffect.eq( - 0 - ) - ? new Big(0) - : dividendInBaseCurrency.div( - timeWeightedInvestmentWithCurrencyEffect - ) - }); + if (!holding) { + return undefined; + } - const historicalData = await this.dataProviderService.getHistorical( - [{ dataSource, symbol }], - 'day', - parseISO(firstBuyDate), - new Date() - ); + const { + averagePrice, + currency, + dividendInBaseCurrency, + fee, + firstBuyDate, + grossPerformance, + grossPerformancePercentage, + grossPerformancePercentageWithCurrencyEffect, + grossPerformanceWithCurrencyEffect, + investmentWithCurrencyEffect, + marketPrice, + netPerformance, + netPerformancePercentage, + netPerformancePercentageWithCurrencyEffectMap, + netPerformanceWithCurrencyEffectMap, + quantity, + tags, + timeWeightedInvestment, + timeWeightedInvestmentWithCurrencyEffect, + transactionCount + } = holding; - const historicalDataArray: HistoricalDataItem[] = []; - let marketPriceMax = Math.max( - activitiesOfHolding[0].unitPriceInAssetProfileCurrency, - marketPrice - ); - let marketPriceMaxDate = - marketPrice > activitiesOfHolding[0].unitPriceInAssetProfileCurrency - ? new Date() - : activitiesOfHolding[0].date; - let marketPriceMin = Math.min( - activitiesOfHolding[0].unitPriceInAssetProfileCurrency, - marketPrice + const activitiesOfHolding = activities.filter(({ SymbolProfile }) => { + return ( + SymbolProfile.dataSource === dataSource && + SymbolProfile.symbol === symbol ); + }); - if (historicalData[symbol]) { - let j = -1; - for (const [date, { marketPrice }] of Object.entries( - historicalData[symbol] - )) { - while ( - j + 1 < transactionPoints.length && - !isAfter(parseDate(transactionPoints[j + 1].date), parseDate(date)) - ) { - j++; - } - - let currentAveragePrice = 0; - let currentQuantity = 0; + const dividendYieldPercent = getAnnualizedPerformancePercent({ + daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)), + netPerformancePercentage: timeWeightedInvestment.eq(0) + ? new Big(0) + : dividendInBaseCurrency.div(timeWeightedInvestment) + }); - const currentSymbol = transactionPoints[j]?.items.find( - (transactionPointSymbol) => { - return transactionPointSymbol.symbol === symbol; - } - ); + const dividendYieldPercentWithCurrencyEffect = + getAnnualizedPerformancePercent({ + daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)), + netPerformancePercentage: timeWeightedInvestmentWithCurrencyEffect.eq(0) + ? new Big(0) + : dividendInBaseCurrency.div(timeWeightedInvestmentWithCurrencyEffect) + }); - if (currentSymbol) { - currentAveragePrice = currentSymbol.averagePrice.toNumber(); - currentQuantity = currentSymbol.quantity.toNumber(); - } + const historicalData = await this.dataProviderService.getHistorical( + [{ dataSource, symbol }], + 'day', + parseISO(firstBuyDate), + new Date() + ); - historicalDataArray.push({ - date, - averagePrice: currentAveragePrice, - marketPrice: - historicalDataArray.length > 0 - ? marketPrice - : currentAveragePrice, - quantity: currentQuantity - }); + const historicalDataArray: HistoricalDataItem[] = []; + let marketPriceMax = Math.max( + activitiesOfHolding[0].unitPriceInAssetProfileCurrency, + marketPrice + ); + let marketPriceMaxDate = + marketPrice > activitiesOfHolding[0].unitPriceInAssetProfileCurrency + ? new Date() + : activitiesOfHolding[0].date; + let marketPriceMin = Math.min( + activitiesOfHolding[0].unitPriceInAssetProfileCurrency, + marketPrice + ); - if (marketPrice > marketPriceMax) { - marketPriceMax = marketPrice; - marketPriceMaxDate = parseISO(date); - } - marketPriceMin = Math.min( - marketPrice ?? Number.MAX_SAFE_INTEGER, - marketPriceMin - ); + if (historicalData[symbol]) { + let j = -1; + for (const [date, { marketPrice }] of Object.entries( + historicalData[symbol] + )) { + while ( + j + 1 < transactionPoints.length && + !isAfter(parseDate(transactionPoints[j + 1].date), parseDate(date)) + ) { + j++; } - } else { - // Add historical entry for buy date, if no historical data available - historicalDataArray.push({ - averagePrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency, - date: firstBuyDate, - marketPrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency, - quantity: activitiesOfHolding[0].quantity - }); - } - const performancePercent = - this.benchmarkService.calculateChangeInPercentage( - marketPriceMax, - marketPrice - ); + let currentAveragePrice = 0; + let currentQuantity = 0; - return { - firstBuyDate, - marketPrice, - marketPriceMax, - marketPriceMin, - SymbolProfile, - tags, - activities: activitiesOfHolding, - activitiesCount: transactionCount, - averagePrice: averagePrice.toNumber(), - dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], - dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), - dividendYieldPercent: dividendYieldPercent.toNumber(), - dividendYieldPercentWithCurrencyEffect: - dividendYieldPercentWithCurrencyEffect.toNumber(), - feeInBaseCurrency: this.exchangeRateDataService.toCurrency( - fee.toNumber(), - SymbolProfile.currency, - userCurrency - ), - grossPerformance: grossPerformance?.toNumber(), - grossPerformancePercent: grossPerformancePercentage?.toNumber(), - grossPerformancePercentWithCurrencyEffect: - grossPerformancePercentageWithCurrencyEffect?.toNumber(), - grossPerformanceWithCurrencyEffect: - grossPerformanceWithCurrencyEffect?.toNumber(), - historicalData: historicalDataArray, - investmentInBaseCurrencyWithCurrencyEffect: - investmentWithCurrencyEffect?.toNumber(), - netPerformance: netPerformance?.toNumber(), - netPerformancePercent: netPerformancePercentage?.toNumber(), - netPerformancePercentWithCurrencyEffect: - netPerformancePercentageWithCurrencyEffectMap?.['max']?.toNumber(), - netPerformanceWithCurrencyEffect: - netPerformanceWithCurrencyEffectMap?.['max']?.toNumber(), - performances: { - allTimeHigh: { - performancePercent, - date: marketPriceMaxDate + const currentSymbol = transactionPoints[j]?.items.find( + (transactionPointSymbol) => { + return transactionPointSymbol.symbol === symbol; } - }, - quantity: quantity.toNumber(), - value: this.exchangeRateDataService.toCurrency( - quantity.mul(marketPrice ?? 0).toNumber(), - currency, - userCurrency - ) - }; - } else { - const currentData = await this.dataProviderService.getQuotes({ - user, - items: [{ symbol, dataSource: DataSource.YAHOO }] - }); - const marketPrice = currentData[symbol]?.marketPrice; - - let historicalData = await this.dataProviderService.getHistorical( - [{ symbol, dataSource: DataSource.YAHOO }], - 'day', - portfolioStart, - new Date() - ); + ); - if (isEmpty(historicalData)) { - try { - historicalData = await this.dataProviderService.getHistoricalRaw({ - assetProfileIdentifiers: [{ symbol, dataSource: DataSource.YAHOO }], - from: portfolioStart, - to: new Date() - }); - } catch { - historicalData = { - [symbol]: {} - }; + if (currentSymbol) { + currentAveragePrice = currentSymbol.averagePrice.toNumber(); + currentQuantity = currentSymbol.quantity.toNumber(); } - } - - const historicalDataArray: HistoricalDataItem[] = []; - let marketPriceMax = marketPrice; - let marketPriceMaxDate = new Date(); - let marketPriceMin = marketPrice; - for (const [date, { marketPrice }] of Object.entries( - historicalData[symbol] - )) { historicalDataArray.push({ date, - value: marketPrice + averagePrice: currentAveragePrice, + marketPrice: + historicalDataArray.length > 0 ? marketPrice : currentAveragePrice, + quantity: currentQuantity }); if (marketPrice > marketPriceMax) { @@ -1057,48 +910,70 @@ export class PortfolioService { marketPriceMin ); } + } else { + // Add historical entry for buy date, if no historical data available + historicalDataArray.push({ + averagePrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency, + date: firstBuyDate, + marketPrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency, + quantity: activitiesOfHolding[0].quantity + }); + } - const performancePercent = - this.benchmarkService.calculateChangeInPercentage( - marketPriceMax, - marketPrice - ); - - return { - marketPrice, + const performancePercent = + this.benchmarkService.calculateChangeInPercentage( marketPriceMax, - marketPriceMin, - SymbolProfile, - activities: [], - activitiesCount: 0, - averagePrice: 0, - dataProviderInfo: undefined, - dividendInBaseCurrency: 0, - dividendYieldPercent: 0, - dividendYieldPercentWithCurrencyEffect: 0, - feeInBaseCurrency: 0, - firstBuyDate: undefined, - grossPerformance: undefined, - grossPerformancePercent: undefined, - grossPerformancePercentWithCurrencyEffect: undefined, - grossPerformanceWithCurrencyEffect: undefined, - historicalData: historicalDataArray, - investmentInBaseCurrencyWithCurrencyEffect: 0, - netPerformance: undefined, - netPerformancePercent: undefined, - netPerformancePercentWithCurrencyEffect: undefined, - netPerformanceWithCurrencyEffect: undefined, - performances: { - allTimeHigh: { - performancePercent, - date: marketPriceMaxDate - } - }, - quantity: 0, - tags: [], - value: 0 - }; - } + marketPrice + ); + + return { + firstBuyDate, + marketPrice, + marketPriceMax, + marketPriceMin, + SymbolProfile, + tags, + activities: activitiesOfHolding, + activitiesCount: transactionCount, + averagePrice: averagePrice.toNumber(), + dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], + dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), + dividendYieldPercent: dividendYieldPercent.toNumber(), + dividendYieldPercentWithCurrencyEffect: + dividendYieldPercentWithCurrencyEffect.toNumber(), + feeInBaseCurrency: this.exchangeRateDataService.toCurrency( + fee.toNumber(), + SymbolProfile.currency, + userCurrency + ), + grossPerformance: grossPerformance?.toNumber(), + grossPerformancePercent: grossPerformancePercentage?.toNumber(), + grossPerformancePercentWithCurrencyEffect: + grossPerformancePercentageWithCurrencyEffect?.toNumber(), + grossPerformanceWithCurrencyEffect: + grossPerformanceWithCurrencyEffect?.toNumber(), + historicalData: historicalDataArray, + investmentInBaseCurrencyWithCurrencyEffect: + investmentWithCurrencyEffect?.toNumber(), + netPerformance: netPerformance?.toNumber(), + netPerformancePercent: netPerformancePercentage?.toNumber(), + netPerformancePercentWithCurrencyEffect: + netPerformancePercentageWithCurrencyEffectMap?.['max']?.toNumber(), + netPerformanceWithCurrencyEffect: + netPerformanceWithCurrencyEffectMap?.['max']?.toNumber(), + performances: { + allTimeHigh: { + performancePercent, + date: marketPriceMaxDate + } + }, + quantity: quantity.toNumber(), + value: this.exchangeRateDataService.toCurrency( + quantity.mul(marketPrice ?? 0).toNumber(), + currency, + userCurrency + ) + }; } public async getPerformance({ From cca1590c2a3eb2383dcf251ff8df20959e5f99c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:07:31 +0100 Subject: [PATCH 10/10] Feature/update locales (#5931) * Update locales * Update translation * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.de.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.es.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.fr.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.it.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.pl.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.pt.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.tr.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.uk.xlf | 52 ++++++++++++++----------- apps/client/src/locales/messages.xlf | 50 ++++++++++++++---------- apps/client/src/locales/messages.zh.xlf | 52 ++++++++++++++----------- 13 files changed, 360 insertions(+), 263 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e770f2c..f176dd4af 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 ### Changed - Refactored the get holding functionality in the portfolio service +- Improved the language localization for German (`de`) ## 2.216.0 - 2025-11-10 diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 7513eedaf..e75cabf4a 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -295,7 +295,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351
@@ -1486,6 +1486,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Implicació per Dia @@ -1995,7 +2003,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -2459,7 +2467,7 @@ Prova Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -2467,7 +2475,7 @@ Bescanviar el cupó apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -3344,7 +3352,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -3816,7 +3824,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -4372,7 +4380,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -4436,7 +4444,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -4788,7 +4796,7 @@ És gratuït. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5217,7 +5225,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5505,7 +5513,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -6745,7 +6753,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6788,14 +6796,6 @@ 69 - - No auto-renewal. - No auto-renewal. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year This year @@ -6857,7 +6857,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Limited Offer! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Get extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index a3583df02..9b515539c 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -42,7 +42,7 @@ bitte apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -669,6 +669,14 @@ 231 + + No auto-renewal on membership. + Keine automatische Erneuerung der Mitgliedschaft. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Engagement pro Tag @@ -726,7 +734,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -854,7 +862,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1230,7 +1238,7 @@ Premium ausprobieren apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -1238,7 +1246,7 @@ Gutschein einlösen apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2290,7 +2298,7 @@ kontaktiere uns apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -3058,7 +3066,7 @@ Suchst du nach einem Studentenrabatt? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3550,7 +3558,7 @@ Es ist kostenlos. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5264,7 +5272,7 @@ mit deiner Universitäts-E-Mail-Adresse apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5444,7 +5452,7 @@ Fordere ihn an apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5768,7 +5776,7 @@ hier apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6769,7 +6777,7 @@ Wenn du die Eröffnung eines Kontos planst bei apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6812,14 +6820,6 @@ 69 - - No auto-renewal. - Keine automatische Erneuerung. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Dieses Jahr @@ -6881,7 +6881,7 @@ um unseren Empfehlungslink zu verwenden und ein Ghostfolio Premium-Abonnement für ein Jahr zu erhalten apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Begrenztes Angebot! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Erhalte extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 62f437994..c70552d1f 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -43,7 +43,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -654,6 +654,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Contratación diaria @@ -711,7 +719,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -839,7 +847,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1215,7 +1223,7 @@ Prueba Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -1223,7 +1231,7 @@ Canjea el cupón apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2275,7 +2283,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -3035,7 +3043,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3535,7 +3543,7 @@ Es gratis. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5241,7 +5249,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5421,7 +5429,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5745,7 +5753,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6746,7 +6754,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6789,14 +6797,6 @@ 69 - - No auto-renewal. - Sin renovación automática. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Este año @@ -6858,7 +6858,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7910,6 +7910,10 @@ Limited Offer! ¡Oferta limitada! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7918,9 +7922,13 @@ Get extra Obtén extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 560859d05..af07071c6 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -34,7 +34,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -861,6 +861,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Engagement par Jour @@ -1106,7 +1114,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1494,7 +1502,7 @@ Essayer Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -1502,7 +1510,7 @@ Utiliser un Code Promotionnel apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2322,7 +2330,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -2514,7 +2522,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -2742,7 +2750,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -3534,7 +3542,7 @@ C’est gratuit. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5240,7 +5248,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5420,7 +5428,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5744,7 +5752,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6745,7 +6753,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6788,14 +6796,6 @@ 69 - - No auto-renewal. - Pas de renouvellement automatique. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Cette année @@ -6857,7 +6857,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Offre Limitée ! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Obtenez supplémentaires + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 076c02068..b5987e2b6 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -43,7 +43,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -654,6 +654,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Partecipazione giornaliera @@ -711,7 +719,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -839,7 +847,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1215,7 +1223,7 @@ Prova Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -1223,7 +1231,7 @@ Riscatta il buono apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2275,7 +2283,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -3035,7 +3043,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3535,7 +3543,7 @@ È gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5241,7 +5249,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5421,7 +5429,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5745,7 +5753,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6746,7 +6754,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6789,14 +6797,6 @@ 69 - - No auto-renewal. - No rinnovo automatico. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Anno corrente @@ -6858,7 +6858,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7910,6 +7910,10 @@ Limited Offer! Offerta limitata! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7918,9 +7922,13 @@ Get extra Get extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 4a17736b4..b88340f52 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -42,7 +42,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -653,6 +653,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Betrokkenheid per dag @@ -710,7 +718,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -838,7 +846,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1214,7 +1222,7 @@ Probeer Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -1222,7 +1230,7 @@ Coupon inwisselen apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2274,7 +2282,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -3034,7 +3042,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3534,7 +3542,7 @@ Het is gratis. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5240,7 +5248,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5420,7 +5428,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5744,7 +5752,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6745,7 +6753,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6788,14 +6796,6 @@ 69 - - No auto-renewal. - Geen automatische verlenging. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Dit jaar @@ -6857,7 +6857,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Beperkt aanbod! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Krijg extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 321cfbecd..dddb4f79c 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -243,7 +243,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -1314,6 +1314,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Zaangażowanie na Dzień @@ -1691,7 +1699,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -2179,7 +2187,7 @@ Wypróbuj Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -2187,7 +2195,7 @@ Wykorzystaj kupon apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2979,7 +2987,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -3435,7 +3443,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -3983,7 +3991,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -4335,7 +4343,7 @@ Jest bezpłatny. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -4744,7 +4752,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -4888,7 +4896,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -5744,7 +5752,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6745,7 +6753,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6788,14 +6796,6 @@ 69 - - No auto-renewal. - Bez automatycznego odnawiania. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year W tym roku @@ -6857,7 +6857,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Oferta ograniczona czasowo! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Uzyskaj dodatkowo + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index dc8804544..fbbd51c47 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -34,7 +34,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -733,6 +733,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Envolvimento por Dia @@ -986,7 +994,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1482,7 +1490,7 @@ Experimentar Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -1490,7 +1498,7 @@ Resgatar Cupão apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2450,7 +2458,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -2642,7 +2650,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -3098,7 +3106,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3534,7 +3542,7 @@ É gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5240,7 +5248,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5420,7 +5428,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5744,7 +5752,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6745,7 +6753,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6788,14 +6796,6 @@ 69 - - No auto-renewal. - Sem renovação automática. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Este ano @@ -6857,7 +6857,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Limited Offer! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Get extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 235f670a3..9c3820229 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -215,7 +215,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -1182,6 +1182,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day Günlük etkileşim @@ -1551,7 +1559,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -2563,7 +2571,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -3475,7 +3483,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3827,7 +3835,7 @@ Ücretsiz. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -4336,7 +4344,7 @@ Premium’u Deneyin apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -4344,7 +4352,7 @@ Kupon Kullan apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -4584,7 +4592,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -5248,7 +5256,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -5420,7 +5428,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -5744,7 +5752,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6745,7 +6753,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6788,14 +6796,6 @@ 69 - - No auto-renewal. - Otomatik yenileme yok. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year Bu yıl @@ -6857,7 +6857,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7909,6 +7909,10 @@ Limited Offer! Sınırlı Teklif! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Get extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index c1f2c7bce..f34d576b2 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -295,7 +295,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -1527,7 +1527,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -1558,6 +1558,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Do you really want to delete this tag? Ви дійсно хочете видалити цей тег? @@ -1783,7 +1791,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -2751,7 +2759,7 @@ Спробуйте Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -2759,15 +2767,7 @@ Обміняти купон apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 - - - - No auto-renewal. - Без автоматичного поновлення. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 + 66 @@ -3636,7 +3636,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -4108,7 +4108,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -4700,7 +4700,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -4764,7 +4764,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -5156,7 +5156,7 @@ Це безкоштовно. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -5763,7 +5763,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -5955,7 +5955,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -6243,7 +6243,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -7909,6 +7909,10 @@ Limited Offer! Limited Offer! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7917,9 +7921,13 @@ Get extra Get extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 3a6ce2f09..1d8c395ad 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -228,7 +228,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -1239,6 +1239,13 @@ 231 + + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day @@ -1583,7 +1590,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -2027,14 +2034,14 @@ Try Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 Redeem Coupon apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2763,7 +2770,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -3172,7 +3179,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -3665,7 +3672,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -3985,7 +3992,7 @@ It’s free. apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -4366,7 +4373,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -4515,7 +4522,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -5277,7 +5284,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6155,7 +6162,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6186,13 +6193,6 @@ 63 - - No auto-renewal. - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - From the beginning @@ -6240,7 +6240,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7167,6 +7167,10 @@ Limited Offer! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7174,9 +7178,13 @@ Get extra + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index d5090164d..4b5e3efd8 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -244,7 +244,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 350 + 351 @@ -1323,6 +1323,14 @@ 231 + + No auto-renewal on membership. + No auto-renewal on membership. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 73 + + Engagement per Day 每天的参与度 @@ -1700,7 +1708,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 343 + 344 apps/client/src/app/pages/register/register-page.html @@ -2188,7 +2196,7 @@ 尝试高级版 apps/client/src/app/components/user-account-membership/user-account-membership.html - 49 + 52 @@ -2196,7 +2204,7 @@ 兑换优惠券 apps/client/src/app/components/user-account-membership/user-account-membership.html - 63 + 66 @@ -2988,7 +2996,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 377 + 378 apps/client/src/app/pages/public/public-page.html @@ -3444,7 +3452,7 @@ 使用您的学校电子邮件地址 apps/client/src/app/pages/pricing/pricing-page.html - 365 + 366 @@ -3992,7 +4000,7 @@ 寻找学生折扣? apps/client/src/app/pages/pricing/pricing-page.html - 359 + 360 @@ -4344,7 +4352,7 @@ 免费。 apps/client/src/app/pages/pricing/pricing-page.html - 379 + 380 @@ -4765,7 +4773,7 @@ 请求它 apps/client/src/app/pages/pricing/pricing-page.html - 361 + 362 @@ -4933,7 +4941,7 @@ 联系我们 apps/client/src/app/pages/pricing/pricing-page.html - 353 + 354 @@ -5777,7 +5785,7 @@ 这里 apps/client/src/app/pages/pricing/pricing-page.html - 364 + 365 @@ -6746,7 +6754,7 @@ 如果您计划开通账户在 apps/client/src/app/pages/pricing/pricing-page.html - 329 + 330 @@ -6789,14 +6797,6 @@ 69 - - No auto-renewal. - 不自动续订。 - - apps/client/src/app/components/user-account-membership/user-account-membership.html - 70 - - This year 今年 @@ -6858,7 +6858,7 @@ 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 apps/client/src/app/pages/pricing/pricing-page.html - 357 + 358 @@ -7910,6 +7910,10 @@ Limited Offer! 限时优惠! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 40 + apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -7918,9 +7922,13 @@ Get extra 获取额外 + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 43 + apps/client/src/app/pages/pricing/pricing-page.html - 314 + 315